大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(三十二):模型評估(一)

大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(三十一):機器學(xué)習(xí)模型總結(jié)
大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(三十三):模型評估(二)

一、分類模型評估

1. 二分類
  • 二分類就是標(biāo)注分類時有兩類的分類瘤旨,在數(shù)據(jù)挖掘中是常見的類型语御。
  • 通常會將二分類中更被關(guān)注的類定義成正類,用數(shù)字1來表示梨睁。
  • 另一個類定義成負(fù)類济瓢,用數(shù)字0表示帚戳。
  • Y\_test:[0,1,0,0,......0,1]
  • Y\_pred:[0,1,0,0,......0,1]
  • 有時0和1不是直接得到的,而是經(jīng)過模型輸出后被劃分為正類的概率:
  • Y\_pred:[0.5,0.6,0.1,0.8......0.4,0.5]
  • 這時需要確定一個閾值(比如0.5)通铲,大于閾值為1毕莱,否則為0。
2. 混淆矩陣
  • 如果把測試集的真實分類和經(jīng)過模型預(yù)測后最終的判別結(jié)果進(jìn)行整理颅夺,會得到四種映射關(guān)系:
名稱 實際值 預(yù)測值
TP(True Positive)
FN(False Negative),漏分類 負(fù)
FP(False Positive),假正類 負(fù)
TN(True Negative) 負(fù) 負(fù)
  • 如果把上圖中各類映射的數(shù)量數(shù)出來朋截,并整理成為一個矩陣的形式,就是混淆矩陣吧黄。
/ 0 1
0 Y_00 Y_01
1 Y_10 Y_11
  • 矩陣中的每一行代表一個真實的分類
  • 矩陣中的每一列代表一個預(yù)測的分類
  • 如果把四個映射找到混淆矩陣中的位置部服,則如圖:
/ 0 1
0 TN FP
1 FN TP
  • 可以看出,對角線上的分類屬于正確分類拗慨。
  • 不在對角線上的分類數(shù)據(jù)錯誤分類廓八。
  • 所以理想的模型應(yīng)該是一個對角陣,如果得不到對角陣赵抢,對角線上的數(shù)字加和占統(tǒng)治地位也是可以的剧蹂。
3. 關(guān)鍵指標(biāo)
  • 可以通過混淆矩陣獲得關(guān)鍵指標(biāo)
  • 正確率(Accuracy Rate)\frac{TP+TN}{TP+TN+FN+FP}
  • 召回率(Recall,True Positive Rate)\frac{TP}{TP+FN}
  • F-measure(正確率和召回率的權(quán)衡值)\frac{2{\times}Recall{\times}Accuracy}{Recall+Accuracy}
  • 準(zhǔn)確率(Precision)\frac{TP}{TP+FP}
  • 錯誤接收率(FPR)\frac{FP}{FP+TN}
  • 錯誤拒絕率(FRR)\frac{FN}{TP+FN}
4. 多元混淆矩陣
  • 二分類不同烦却,多分類中的每個類都是被關(guān)注的宠叼。
  • 多分類也可以制作成混淆矩陣,同樣對角線上的值表示正確值短绸。
/ 0 1 2
0 Y_00 Y_01 Y_02
1 Y_10 Y_11 Y_12
2 Y_20 Y_21 Y_22
  • 準(zhǔn)確率:和二分類保持一致车吹。
  • 召回率/F-measure
  1. 先計算所有的TP筹裕、FN等醋闭,再以二分類方法計算。
  2. 分別把每個類當(dāng)做正類朝卒,都算一個召回率/F-measure证逻,然后取加權(quán)或者不加權(quán)的平均值。
  • 如果值是模型輸出后被劃分的概率抗斤,可以使用ROCAUC
4.1 ROC
  • ROC(Receiver Operating characteristic Curve)可以很容易查出任意界限值時的對性能的識別能力 囚企。
  • 首先將模型輸出的預(yù)測結(jié)果得分從大到小進(jìn)行排列:


  • 將不同閾值得出的關(guān)鍵指標(biāo)結(jié)果畫到坐標(biāo)系上丈咐,連成一條線:
4.2 AUC
  • AUC(Area Under Curve)被定義為ROC下與坐標(biāo)軸圍成的面積。
  • 由于ROC一般都處于y=x直線的上方龙宏,所以AUC的取值范圍在0.5和1之間棵逊。
  • AUC越接近1.0,檢測方法真實性越高;等于0.5時银酗,則真實性最低辆影,無應(yīng)用價值。
4.3 增益圖
  • 增益圖可以在宏觀上反應(yīng)分類器的分類效果黍特。
4.4 KS圖
  • KS圖可以通過TPRFPR的差距蛙讥,反映出對正類樣本分類的區(qū)分度。
5. 代碼實現(xiàn)
>>>import os
>>>import numpy as np
>>>import pandas as pd
>>>import tensorflow as tf
>>>import matplotlib.pyplot as plt
>>>from sklearn.model_selection import train_test_split
>>>from sklearn.metrics import roc_curve,auc,roc_auc_score
>>>from sklearn.preprocessing import StandardScaler
>>>from keras.models import Sequential
>>>from keras.layers.core import Dense,Activation

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))

>>>X_tt,X_validation,Y_tt,Y_validation = train_test_split(df.JobLevel,df.JobSatisfaction,test_size=0.2)
>>>StandardScaler().fit_transform(np.array(X_tt).reshape(-1,1))
>>>X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size=0.25)

>>>mdl = Sequential()
>>>mdl.add(Dense(50))
>>>mdl.add(Activation("sigmoid"))
>>>mdl.add(Dense(2))
>>>mdl.add(Activation("softmax"))
>>>mdl.compile(loss="mean_squared_error",optimizer=tf.keras.optimizers.SGD(lr=0.05))
>>>mdl.fit(X_train,np.array([[0,1] if i==1 else [1,0] for i in Y_train]),epochs=50,batch_size=800)

>>>f = plt.figure()

>>>xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
>>>for i in range(len(xy_lst)):
>>>    X_part = xy_lst[i][0]
>>>    Y_part = [0 if x<=1 else 1 for x in xy_lst[i][1]]

>>>    Y_pred = mdl.predict(X_part)
>>>    Y_pred = np.array(Y_pred[:,1]).reshape((1,-1))[0]
>>>    f.add_subplot(1,3,i+1)
>>>    fpr,tpr,threshold = roc_curve(Y_part,Y_pred)
>>>    plt.plot(fpr,tpr)
>>>    print("NN","AUC",auc(fpr,tpr))
>>>    print("NN","AUC_Score",roc_auc_score(Y_part,Y_pred))
>>>    print("="*40)
>>>plt.show()
Epoch 1/50
2/2 [==============================] - 0s 1ms/step - loss: 0.2929
Epoch 2/50
2/2 [==============================] - 0s 1ms/step - loss: 0.2168
Epoch 3/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1858
Epoch 4/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1738
Epoch 5/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1673
Epoch 6/50
2/2 [==============================] - 0s 0s/step - loss: 0.1638
Epoch 7/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1623
Epoch 8/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1616
Epoch 9/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1613
Epoch 10/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1606
Epoch 11/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1602
Epoch 12/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1599
Epoch 13/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1598
Epoch 14/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 15/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1596
Epoch 16/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 17/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1596
Epoch 18/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 19/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 20/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 21/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 22/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1595
Epoch 23/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 24/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 25/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 26/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
Epoch 27/50
2/2 [==============================] - 0s 0s/step - loss: 0.1595
Epoch 28/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1595
Epoch 29/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
Epoch 30/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 31/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 32/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 33/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 34/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
Epoch 35/50
2/2 [==============================] - 0s 0s/step - loss: 0.1595
Epoch 36/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
Epoch 37/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 38/50
2/2 [==============================] - 0s 0s/step - loss: 0.1596
Epoch 39/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 40/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
Epoch 41/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 42/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1595
Epoch 43/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1596
Epoch 44/50
2/2 [==============================] - 0s 0s/step - loss: 0.1597
Epoch 45/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 46/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 47/50
2/2 [==============================] - 0s 1ms/step - loss: 0.1596
Epoch 48/50
2/2 [==============================] - 0s 0s/step - loss: 0.1595
Epoch 49/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1596
Epoch 50/50
2/2 [==============================] - 0s 1000us/step - loss: 0.1595
28/28 [==============================] - 0s 444us/step
NN AUC 0.4800573010558846
NN AUC_Score 0.4800573010558846
========================================
10/10 [==============================] - 0s 556us/step
NN AUC 0.5361630625365283
NN AUC_Score 0.5361630625365283
========================================
10/10 [==============================] - 0s 667us/step
NN AUC 0.5459870673259795
NN AUC_Score 0.5459870673259795
========================================
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灭衷,一起剝皮案震驚了整個濱河市次慢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翔曲,老刑警劉巖迫像,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異部默,居然都是意外死亡侵蒙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門傅蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纷闺,“玉大人,你說我怎么就攤上這事份蝴±绻Γ” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵婚夫,是天一觀的道長浸卦。 經(jīng)常有香客問我,道長案糙,這世上最難降的妖魔是什么限嫌? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮时捌,結(jié)果婚禮上怒医,老公的妹妹穿的比我還像新娘。我一直安慰自己奢讨,他們只是感情好稚叹,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般扒袖。 火紅的嫁衣襯著肌膚如雪塞茅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天季率,我揣著相機與錄音野瘦,去河邊找鬼。 笑死飒泻,一個胖子當(dāng)著我的面吹牛缅刽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蠢络,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼衰猛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刹孔?” 一聲冷哼從身側(cè)響起啡省,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎髓霞,沒想到半個月后卦睹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡方库,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年结序,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纵潦。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡徐鹤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邀层,到底是詐尸還是另有隱情返敬,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布寥院,位于F島的核電站劲赠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秸谢。R本人自食惡果不足惜凛澎,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望估蹄。 院中可真熱鬧塑煎,春花似錦、人聲如沸元媚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刊棕。三九已至炭晒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甥角,已是汗流浹背网严。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗤无,地道東北人震束。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像当犯,于是被迫代替她去往敵國和親垢村。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容