【问题标题】:Can I get a list of wrong predictions in scikit-learn?我可以在 scikit-learn 中获得错误预测列表吗?
【发布时间】:2017-12-23 21:26:40
【问题描述】:

我们可以使用svm.SVC.score()来评估SVM模型的准确性。如果预测错误,我想得到预测的类和实际的类。我如何在scikit-learn 中实现这一点?

【问题讨论】:

标签: python machine-learning scikit-learn svm


【解决方案1】:

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

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

【讨论】:

  • 我有什么办法可以得到错误预测的索引值。
  • 只用“枚举”包裹循环?
【解决方案2】:

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

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

您可以在 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

【讨论】:

    【解决方案3】:

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

    from sklearn import metrics
    
    my_matrix = metrics.confusion_matrix(Y_test, Y_predicted)
    

    Y_test:你的测试类数组

    Y_predicted:模型的预测数组

    混淆矩阵的单元格将为您提供:真阳性值、假阳性值、假阴性值和真阴性值。

    请查看this

    【讨论】:

      【解决方案4】:

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

      X 数据

      y- 你的预测

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

      【讨论】:

        猜你喜欢
        • 2021-05-25
        • 2018-01-09
        • 2021-01-11
        • 2015-11-21
        • 2015-03-01
        • 1970-01-01
        • 2014-06-03
        • 2019-11-09
        相关资源
        最近更新 更多