2017-07-18 17 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

相关问题