我们可以使用svm.SVC.score()
来评估SVM模型的准确性。我想在预测错误的情况下获得预测类和实际类。如何在scikit-learn
?
答案 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)
这取决于您希望错误预测的形式。对于大多数用例,混淆矩阵应该足够了。
混淆矩阵是实际类与预测类的关系图,因此图的对角线是所有正确的预测,其余的单元格是不正确的预测。
您可以在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]