我们可以使用svm.SVC.score()
来评估SVM模型的准确性。如果预测错误,我想获得预测的班级和实际的班级。如何在scikit-learn
中实现此目标?
最简单的方法是遍历您的预测(和正确的分类),然后对输出执行任何所需的操作(在下面的示例中,我将其打印到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)
取决于您希望不正确的预测采用哪种形式。对于大多数使用情况,混淆矩阵应足够。
混淆矩阵是实际类别与预测类别的图,因此图的对角线是所有正确的预测,而其余单元格是错误的预测。
您可以在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
您可以使用sklearn直接创建混淆矩阵。它给出(2 * 2)矩阵。
from sklearn import metrics
my_matrix = metrics.confusion_matrix(Y_test, Y_predicted)
Y_test:测试类的数组
Y_predicted:模型预测的数组
混淆矩阵的单元格将为您提供:真正值,假正值,假负值和真负值。
请查看this。