2017-07-18 38 views
1

我們可以使用svm.SVC.score()來評估SVM模型的準確性。我想在預測錯誤的情況下得到預期的課程和實際的課程。我如何在scikit-learn中實現這個目標?scikit-learn中可以得到SVM評分函數中的錯誤預測列表嗎?

+1

嗨,歡迎來到Stack Overflow,請花點時間瀏覽[歡迎導覽](https://stackoverflow.com/tour),在此處瞭解您的方式(並獲取您的第一個徽章),閱讀如何創建[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)並檢查[如何提出好問題](https://stackoverflow.com/help/how-to - 問),所以你增加了獲得反饋和有用答案的機會。 – DarkCygnus

回答

2

這取決於你想要哪種形式的錯誤預測。對於大多數用例來說,混淆矩陣應該足夠。

混淆矩陣是實際類別與預測類別的圖表,因此圖表的對角線是所有正確的預測,其餘單元是不正確的預測。

Confusion Matrix

你可以看到sklearn的Confusion Matrix example混淆矩陣的一個更好的例子。

如果您只是想要列出所有錯誤分類的值以及它們的預測類和實際類,則可以執行下列操作。

只需選擇實際類別和預測類別不相等的所有數據行。

import numpy as np 
import pandas as pd 

X = np.array([0.1, 0.34, 0.2, 0.98]) 
y = np.array(["A", "B", "A", "C"]) 

y_pred = np.array(["A", "C", "B", "C"]) 

df = pd.DataFrame(X, columns=["X"]) 
df["actual"] = y 
df["predicted"] = y_pred 

incorrect = df[df["actual"] != df["predicted"]] 

在這種情況下,incorrect將包含以下條目。

 X actual predicted 
1 0.34  B   C 
2 0.20  A   B 
4

最簡單的方法就是遍歷你的預測(正確分類),做任何你想要的輸出(在下面的例子中,我將只打印到標準輸出)。

讓我們假設你的數據在輸入,標籤和你訓練的SVM是CLF,那麼你可以做

predictions = clf.predict(inputs) 
for input, prediction, label in zip(inputs, predictions, labels): 
    if prediction != label: 
    print(input, 'has been classified as ', prediction, 'and should be ', label) 
0

您可以直接使一個混淆矩陣使用sklearn。它給出了一個(2 * 2)矩陣。

from sklearn import metrics 

my_matrix = metrics.confusion_matrix(Y_test, Y_predicted) 

Y_test:你的測試類的數組

Y_predicted:通過模型預測的陣列

混淆矩陣會給你的細胞:真正的正值,假陽性值,假陰性值和真負值。請致電this

相關問題