2013-08-21 56 views
1

我正在使用高斯樸素貝葉斯訓練來自熊貓數據框的模型,但在使用precision_recall_curve時出現錯誤。文檔說precision_recall_curve將預測的概率作爲輸入(至少在我閱讀它時),所以我期望下面的工作(xtrain和xtest分別是736和184行的Pandas數據框; ytrain/ytest是736和184的Series分別行):輸入到precision_recall_curve - 預測或prediction_proba輸出?

nb = GaussianNB() 
nb.fit(xtrain, ytrain) 
predicted = nb.predict_proba(xtest) 
precision, recall, threshold = precision_recall_curve(ytest, predicted) 

我期望上述工作,但是我收到一個「IndexError:指數230超出範圍爲尺寸184的」。如果我改爲:

predicted = nb.predict(xtest) 
precision, recall, threshold = precision_recall_curve(ytest, predicted) 

然後它正確執行。 184是xtest和ytest中的行數,但230不是任何這些結構的維數。有人可以解釋這種差異,或者我應該如何使用precision_recall_curve來達到這個目的?

+0

我不知道那裏的230從何而來,但你應該不會使用在熊貓的數據結構scikit學習的估計。 scikit-learn預計NumPy慣例,Pandas違反其中一些規則(例如,通過將一維數組轉換爲列向量而不是行向量)。另外,這是一個二元分類任務嗎? –

回答

1

嘗試使用,如果這是一個二元分類下面,

predicted = nb.predict_proba(xtest) 
precision, recall, threshold = precision_recall_curve(ytest, predicted[:,1])