1. 程式人生 > 程式設計 >解決ROC曲線畫出來只有一個點的問題

解決ROC曲線畫出來只有一個點的問題

之前在做kaggle比賽時,有個比賽使用AUC來評比的,當時試著畫了ROC曲線,結果出來的下圖這樣的圖形。跟平時的ROC曲線差好遠,就只有一個點。而別人家的都是很多轉折的,為啥我的不一樣。

我的圖如下:

解決ROC曲線畫出來只有一個點的問題

正常的圖(sklearn上面擷取的):

解決ROC曲線畫出來只有一個點的問題

思考過後,發現原來:

ROC曲線,一般適用於你的分類器輸出一個“概率值”,即這個樣本屬於某個類的概率是多少。 如此的話,你就需要設定一個閾值, 大於這個閾值屬於正類,小於這個閾值屬於負類。

從而,對於這個閾值P0, 就會得到對應的TPR,FPR,也就是ROC曲線上的一個點,你設定不同的閾值,就會得到不同的TPR,FPR, 從而構成ROC曲線。

通常來說 閾值降低,即進入正類的門檻變低, TPR會變大,但是FPR也會變大, 看他們誰變的快。

之前畫線的時候直接用了分類的預測值,而沒有用上概率這玩意,被劃分為正類的概率。。修改下程式,求多一個概率就能畫出正確的圖形啦。

如果你用GDBT演算法的時候:

gbc = GradientBoostingClassifier()
gbc.fit(x_train,y_train)
resu = gbc.predict(x_test) #進行預測
y_pred_gbc = gbc.predict_proba(x_test)[:,1] ###這玩意就是預測概率的
fpr,tpr,threshold = roc_curve(y_test,y_pred_gbc) ###畫圖的時候要用預測的概率,而不是你的預測的值
plt.plot(fpr,'b',label='AUC = %0.2f' % rocauc)#生成ROC曲線
plt.legend(loc='lower right')
plt.plot([0,1],[0,'r--')
plt.xlim([0,1])
plt.ylim([0,1])
plt.ylabel('真正率')
plt.xlabel('假正率')
plt.show()

解決ROC曲線畫出來只有一個點的問題

以上這篇解決ROC曲線畫出來只有一個點的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。