2017-01-23 63 views
0

我想爲不同的分類器計算roc_auc。有些不是二進制分類器。下面是我使用的代碼的一部分:在scikit-learn中沒有二進制分類器的auc得分

if hasattr(clf, "decision_function"): 
    y_score = clf.fit(X_train, y_train).decision_function(X_test) 
else: 
    y_score = clf.fit(X_train, y_train).predict_proba(X_test) 

AUC=roc_auc_score(y_test, y_score) 

不過,我得到了一些分類錯誤(例如近鄰 ):

ValueError: bad input shape 

短短一句話,我用:y_score = clf.fit(X_train, y_train).predict_proba(X_test),但我真的不知道使用它是否正確。第一

clf.fit(X_train, y_train) 

+0

ROC曲線只能在二進制情況。它在多類設置中沒有意義。 –

回答

0

好了,所以第一件事情,將適合你的模式,你的訓練數據。第一個參數是特徵,第二個參數是目標。好吧,很好地完成。

完成後,您可以在另一個數據集上應用「.predict」或「.predict_proba」以獲得其結果的估計/預測。或者你可以兩者都做配合,並在同一時間預測,因爲你做了如下:

clf.fit(X_train, y_train).predict_proba(X_test) 

現在,這些都是你的預測,而不是你的分數。 你的分數將是預測和真值「(y_test)」的函數。 您可以使用不同的分數指標,取決於你有,如準確度,精密度,召回,F1等這類問題。(閱讀更多http://scikit-learn.org/stable/modules/model_evaluation.html

現在,roc_auc_score是這些指標中的一個,但你得注意你輸入的功能,否則它不會工作。由於roc_auc_score頁面(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score)進行解釋,參數應該是:

y_true:二進制標籤指標真正的二進制標籤。
y_score:目標分數可以是正分類的概率估計值,置信度值,或非閾值測量的決策(由「decision_function」對某些分類器返回)。

所以,如果你有標籤,或multilabels爲y_true,功能無法正常工作,它得是二進制的。
y_score在另一方面可以是二進制或概率(範圍從[0,1])

希望幫助!

編輯:如果你有多標籤問題,你可以做的是一次處理不同的類。這樣它將成爲許多二進制二進制問題/模型。 (嘗試建立一個模型來預測它的A級與否,然後做它的roc曲線,然後移動到下一個級別並構建另一個模型,等等)