如何评价模型的好坏(一)
- 二分類問(wèn)題
- 多分類問(wèn)題
- 連續(xù)變量問(wèn)題
一、二分類問(wèn)題
? ? ? ?二分類模型最常見的模型評(píng)價(jià)指標(biāo)有:ROC曲線,AUC,精準(zhǔn)率-召回率,準(zhǔn)確率,F1-score,混淆矩陣,等。
假設(shè)檢驗(yàn)
案例分析:(酒駕檢測(cè))酒精濃度檢測(cè)結(jié)果分布圖。(綠色:正常司機(jī)酒精濃度檢測(cè)結(jié)果分布。紅色:酒駕司機(jī)酒精濃度檢測(cè)結(jié)果分布)? ?
引入三個(gè)概念:
- 原假設(shè)H0:沒喝酒。???????
- 備擇假設(shè)H1:喝了酒。
- 閾值Threshold:酒駕檢測(cè)標(biāo)準(zhǔn)(分類的閾值,閾值大小可人為改變)
- 閾值左邊:接受原假設(shè)H0。?
- 閾值右邊:拒絕原假設(shè)H0,接受備擇假設(shè)H1。
- 閾值的劃分,產(chǎn)生四個(gè)值: True Positive、True Negative、False Positive(假陽(yáng)性)、False Negative(假陰性),這四個(gè)值構(gòu)成混淆矩陣。
一般默認(rèn):原假設(shè)成立---Negative, 備擇假設(shè)成立---Positive
?
混淆矩陣
| ? | 檢測(cè):喝了酒(Positive) | 檢測(cè):沒喝酒(Negative) |
| 實(shí)際:喝了酒 | True Positive(TP) | False Negative(FN) |
| 實(shí)際:沒喝酒 | False Positive(FP) | True Negative(FN) |
?
?
?
?
?
統(tǒng)計(jì)學(xué)上,
第一類錯(cuò)誤:(棄真)False Positive 假陽(yáng)性
??? 第二類錯(cuò)誤:(存?zhèn)?#xff09;False Negative 假陰性?
具體問(wèn)題具體分析:
(1)醫(yī)療場(chǎng)景:可以容忍假陽(yáng)性,但必須減少假陰性。(假陰性:某病人原本患某種疾病,卻檢測(cè)為沒有生病)
(2)垃圾郵件識(shí)別:可以容忍假陰性,但必須減少假陽(yáng)性。(假陽(yáng)性:某個(gè)非常重要的郵件,被識(shí)別成垃圾郵件被刪除,容易誤事)
?
引入ROC曲線和AUC面積:
周志華《機(jī)器學(xué)習(xí)》33頁(yè):
ROC 全稱是“Receiver Operating Characteristic 曲線”,它源于“二戰(zhàn)”中用于敵機(jī)檢測(cè)的雷達(dá)信號(hào)分析技術(shù),二十世紀(jì)六七十年代來(lái)時(shí)被用于一些心理學(xué)、醫(yī)學(xué)檢測(cè)應(yīng)用中,此后被引入機(jī)器學(xué)習(xí)領(lǐng)域[Spackman,1989]。ROC曲線的縱軸是“真正例率”(True Positive Rate,簡(jiǎn)稱TPR),橫軸是“假正例率”(False Positive Rate,簡(jiǎn)稱FPR)
???????????????????? ???? ? ?TPR = TP/(TP+FN)
???????????????????? ???? ? ?FPR = FP/(TN+FP)
?
從上圖可以看出:
- TPR(真正例率):TP + FN 表示:所有喝酒的人數(shù),TP 表示:實(shí)際喝酒,被檢測(cè)數(shù)喝酒的人數(shù)。
- FPR(假正例率):TN + FP 表示:所有沒有喝酒的人數(shù), FP 表示:實(shí)際沒喝酒,被檢測(cè)出喝酒的人數(shù)。
總結(jié):
?
引入準(zhǔn)確率(accuracy)、召回率(recall)、精準(zhǔn)率(precision)、F1-score:
(上文提到)混淆矩陣:
| ? | 檢測(cè):喝了酒(Positive) | 檢測(cè):沒喝酒(Negative) |
| 實(shí)際:喝了酒 | True Positive(TP) | False Negative(FN) |
| 實(shí)際:沒喝酒 | False Positive(FP) | True Negative(FN) |
?
?
?
?
?
(1)準(zhǔn)確率: accuracy = (TP+TN) / (TP+FN+FP+TN)
- TP+FN+FP+TN 表示:所有接受酒精檢測(cè)的人數(shù)。 TP+TN 表示:所有檢測(cè)正確的人數(shù)。
- 準(zhǔn)確率(accuracy)表示:所有實(shí)例中,分類正確的比例。
(2)召回率:recall = TP / (TP+FN)
- TP+FN 表示:實(shí)際喝了酒的人數(shù), TP 表示:實(shí)際喝了酒,被檢測(cè)出喝了酒的人數(shù)。
- 召回率(recall)表示:所有正例中分類正確的比例。
(3)精準(zhǔn)率: precision = TP / (TP+FP)
- TP+FP 表示:被檢測(cè)出喝了酒的人數(shù), TP 表示:實(shí)際喝了酒,被檢測(cè)出喝了酒的人數(shù)
- 精準(zhǔn)率(precision)表示:被分為正例的示例中實(shí)際為正例的比例。?
?
分析:
對(duì)比:召回率(recall)和精準(zhǔn)率(precision)兩個(gè)公式,發(fā)現(xiàn)只有FN(假陰性)和FP(假陽(yáng)性)表示不同。從酒精濃度檢測(cè)曲線圖中可以看出,FN 和 FP 不同增,即當(dāng) FN 增大時(shí),FP會(huì)減少;當(dāng) FP 增加時(shí),FN 會(huì)減少。 從而分析出,當(dāng) recall 增加時(shí),precision 會(huì)減少;當(dāng)precision 增加時(shí),recall 會(huì)減少,“二者不可兼得”。為了平衡召回率(recall)和精準(zhǔn)率(precision)兩個(gè)指標(biāo),引入F-measure 和MAP(Mean Average Precision)
?
(4)F-measure = (1 + a2)* precision* recall / (a2?* precision + recall)
- 當(dāng)參數(shù)a = 1時(shí),即為 F1-score。
(4-1)F1-score = 2/(1/R + 1/P) = 2* R* P/(R + P)?
- F1-score 表示 召回率 Recall(R)和精準(zhǔn)率 Precision(P)的調(diào)和平均數(shù)
(5)平均準(zhǔn)確率MAP(Mean Average Precision):實(shí)際上指的是Precision-recall曲線圍成的面積,解決了precision,recall和F-measure的單點(diǎn)局限性。
(6)交并比 IOU(intersection over union):交比并?
?
使用Python代碼畫圖計(jì)算:
1.?計(jì)算 召回率(recall)、精準(zhǔn)率(precision)和F1-score
1 from sklearn.metrics import accuracy_score, precision_score, recall_score,f1_score2 y_true = [1,1,1,0,0,0,1] 3 y_pred = [0,1,1,0,1,0,0] 4 precision = precision_score(y_true, y_pred) 5 recall = recall_score(y_true, y_pred) 6 accuracy = accuracy_score(y_true, y_pred) 7 F1_Score = f1_score(y_true, y_pred)
8 print("precision = {}".format(precision)) 9 print("recall = {}".format(recall)) 10 print("accuracy = {}".format(accuracy)) 11 print("F1-score = {}".format(F1_Score)) 結(jié)果顯示:
precision = 0.6666666666666666recall = 0.5accuracy = 0.5714285714285714F1-score = 0.5714285714285715
2. 畫ROC曲線并計(jì)算AUC值
1 from sklearn.datasets import make_classification 2 from sklearn.linear_model import LogisticRegression 3 from sklearn.cross_validation import train_test_split 4 from sklearn.metrics import roc_auc_score, roc_curve 5 import matplotlib.pyplot as plt 6 7 # 生成分類數(shù)據(jù)(X,y) 8 X, y = make_classification(n_samples=10000, n_features=10, 9 n_classes=2,n_informative=5) 10 # 劃分訓(xùn)練集和測(cè)試集 11 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2, random_state=0) 12 13 # 創(chuàng)建logistic回歸模型 14 clf = LogisticRegression() 15 # 模型填充數(shù)據(jù) 16 clf.fit(X_train,y_train) 17 # 模型預(yù)測(cè)數(shù)據(jù) 18 preds = clf.predict_proba(X_test)[:,1] 19 20 # 產(chǎn)生fpr,tpr用于畫ROC曲線 21 fpr,tpr,_ = roc_curve(y_test, preds) 22 # 計(jì)算AUC值 23 roc_auc = roc_auc_score(y_test,preds) 24 25 26 # 開始畫圖 27 plt.figure() 28 lw = 2 29 30 plt.plot(fpr, tpr, color='orange', 31 lw=lw, label='ROC_Curve (area = %0.2f)'% roc_auc) 32 33 plt.plot([0,1],[0,1], color='navy',lw=lw, linestyle='--') 34 plt.xlim([0.0, 1.0]) 35 plt.ylim([0.0, 1.05]) 36 plt.xlabel('False Positive Rate') 37 plt.ylabel('True Positive Rate') 38 plt.title('Receiver operating characteristic Line') 39 plt.legend(loc='lower right') 40 plt.show()?
?
參考資料:
- 周志華 《機(jī)器學(xué)習(xí)》
- 萬(wàn)門大學(xué)教學(xué)視頻 《實(shí)用數(shù)據(jù)挖掘與人工智能一月特訓(xùn)班》
- 百度百科關(guān)于假設(shè)性檢驗(yàn):http://baike.baidu.com/view/1445854.htm
- 關(guān)于MAP講解的博客: https://blog.csdn.net/chengyq116/article/details/81290447
?
??
轉(zhuǎn)載于:https://www.cnblogs.com/xdliyin/p/10349522.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的如何评价模型的好坏(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PTA-1022——Digital Li
- 下一篇: 面向对象初识