簡(jiǎn)介
受試者工作特征曲線(receiver operating characteristic curve,簡(jiǎn)稱ROC曲線),是比較兩個(gè)分類模型好壞的可視化工具。
作用
1.較容易地查出任意界限值時(shí)的對(duì)類別的識(shí)別能力
2.選擇最佳的診斷界限值。ROC曲線越靠近左上角,試驗(yàn)的準(zhǔn)確性就越高。最靠近左上角的ROC曲線的點(diǎn)是錯(cuò)誤最少的最好閾值,其假陽(yáng)性和假陰性的總數(shù)最少。
3.兩種或兩種以上不同診斷試驗(yàn)對(duì)算法性能的比較。在對(duì)同一種算法的兩種或兩種以上診斷方法進(jìn)行比較時(shí),可將各試驗(yàn)的ROC曲線繪制到同一坐標(biāo)中,以直觀地鑒別優(yōu)劣,靠近左上角的ROC曲線所代表的受試者工作最準(zhǔn)確。亦可通過分別計(jì)算各個(gè)試驗(yàn)的ROC曲線下的面積(AUC)進(jìn)行比較,哪一種試驗(yàn)的AUC最大,則哪一種試驗(yàn)的診斷價(jià)值最佳。
分析
ROC曲線是根據(jù)一系列不同的二分類方式(分界值或決定閾),以真陽(yáng)性率TPR(靈敏度)為縱坐標(biāo),假陽(yáng)性率FPR(1-特異度)為橫坐標(biāo)繪制的曲線。

這樣可以一目了然的看出正確分類和錯(cuò)誤分類的樣本數(shù)量,所以
準(zhǔn)確率precision=(TP+TN)/(P+N)
但是在實(shí)際應(yīng)用中,我們感興趣的類往往只占少數(shù),所以在test集存在類不平衡的情況下,準(zhǔn)確率對(duì)于我們的模型意義很小,eg:test中續(xù)費(fèi)90,流失10,即使你把所有的樣本預(yù)測(cè)為續(xù)費(fèi),準(zhǔn)確率依然為90%,但對(duì)于我們感興趣的流失用戶而言,這個(gè)模型沒有什么意義
所以,現(xiàn)實(shí)中我們更在乎的其實(shí)是召回率,即靈敏度,當(dāng)然我們一般關(guān)注較高的是我們感興趣類的召回率
recall =TP/(TP+FN)=TP / P
F度量則對(duì)準(zhǔn)確率和召回率做一個(gè)權(quán)衡
F=(1+a2)*precision*recall/(a*precision+recall)
a2是a的平方,一般默認(rèn)a= 1
說了這么多看似跟ROC沒有相關(guān)的概念,但其實(shí)理解了上面的公式才能更好的理解ROC的作用,這里是美麗的分割線,下面是優(yōu)美的ROC曲線
定義:
TPR = TP/P? 即召回率公式
FPR = FP/N? 即1-specificity
ROC曲線是以FPR為橫坐標(biāo),以TPR為縱坐標(biāo),以概率為閾值來度量模型正確識(shí)別正實(shí)例的比例與模型錯(cuò)誤的把負(fù)實(shí)例識(shí)別成正實(shí)例的比例之間的權(quán)衡,TPR的增加必定以FPR的增加為代價(jià),ROC曲線下方的面積是模型準(zhǔn)確率的度量
所以根據(jù)ROC曲線定義可知,繪制ROC要求模型必須能返回監(jiān)測(cè)元組的類預(yù)測(cè)概率,根據(jù)概率對(duì)元組排序和定秩,并使正概率較大的在頂部,負(fù)概率較大的在底部進(jìn)行畫圖。
代碼實(shí)現(xiàn)
from sklearn.metrics import roc_curve #導(dǎo)入ROC曲線函數(shù)
predict_result = net.predict(test[:,:3]).reshape(len(test))
fpr, tpr, thresholds = roc_curve(test[:,3], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of LM') #作出ROC曲線
plt.xlabel('False Positive Rate') #坐標(biāo)軸標(biāo)簽
plt.ylabel('True Positive Rate') #坐標(biāo)軸標(biāo)簽
plt.ylim(0,1.05) #邊界范圍
plt.xlim(0,1.05) #邊界范圍
plt.legend(loc=4) #圖例
plt.show() #顯示作圖結(jié)果
fps, tps, thresholds = _binary_clf_curve( y_true, y_score, pos_label=pos_label, sample_weight=sample_weight)
fpr_skl, tpr_skl, thresholds_skl = roc_curve(y_true, y_score, drop_intermediate=False)
通過測(cè)試,返回值中,fps和tps就是混淆矩陣中的FP和TP的值;thresholds就是y_score逆序排列后的結(jié)果(由于保留的小數(shù)位數(shù)不同,所以表面上看上去不一樣,其實(shí)是一樣的)。
其中參數(shù)drop_intermediate參數(shù)是對(duì)roc計(jì)算過程的優(yōu)化,不影響roc圖像。
參考鏈接:http://www.itdecent.cn/p/4b616c7838a3