我可以在scikit-learn中获得SVM评分函数中的错误预测列表吗?

时间:2017-07-18 20:27:59

标签: python machine-learning scikit-learn svm

我们可以使用svm.SVC.score()来评估SVM模型的准确性。我想在预测错误的情况下获得预测类和实际类。如何在scikit-learn

中实现此目的

4 个答案:

答案 0 :(得分:10)

最简单的方法是迭代你的预测(和正确的分类),并用输出做任何你想做的事情(在下面的例子中,我将它打印到stdout)。

让我们假设您的数据在输入,标签中,并且您训练过的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) 

答案 1 :(得分:4)

这取决于您希望错误预测的形式。对于大多数用例,混淆矩阵应该足够了。

混淆矩阵是实际类与预测类的关系图,因此图的对角线是所有正确的预测,其余的单元格是不正确的预测。

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

答案 2 :(得分:0)

您可以使用sklearn直接制作混淆矩阵。它给出了一个(2 * 2)矩阵。

from sklearn import metrics

my_matrix = metrics.confusion_matrix(Y_test, Y_predicted)

Y_test:测试类的数组

Y_predicted:您的模型预测数组

混淆矩阵的单元格将为您提供:正正值,假正值,假负值和真负值。

请查看this

答案 3 :(得分:0)

我使用了上面列出的一些方法。但是今天发现了一些更简单的东西。试试看。如果您的数据具有2个功能,则可以使用。

X数据

y-您的预测

false_x = X[y==0][:, 0]

True_x  = X[y==1][:, 0]