我第一次在python中使用SVM。我还使用了5个交叉验证来检查模型的准确性。
该模型的目的是对输出是否为缺陷进行分类。我想对照原始数据集交叉检查输出分类。换句话说,我想了解哪些产品被归类为缺陷,哪些特定产品未被归类为缺陷。我该怎么办?
我的代码:
from sklearn.svm import SVC
svclassifier_rbf = SVC(kernel='rbf')
clf = svclassifier_rbf.fit(X_train, y_train)
from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test,y_pred_A_rbf))
print(classification_report(y_test,y_pred_A_rbf)
)
谢谢你, 尼米什人
答案 0 :(得分:2)
我没有看到代码的交叉验证部分。假设您已经完成了,它看起来像这样:
from sklearn.model_selection import KFold
from sklearn.svm import SVC
kf = KFold(n_splits = 5, shuffle = True)
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train = y_true[train_index]
svclassifier_rbf = SVC(kernel='rbf')
svclassifier_rbf.fit(X_train, y_train)
###### NEXT LINE NEEDED #######
y_pred_A_rbf[test_index] = svclassifier_rbf.predict(X_test)
您的代码中缺少的是svclassifier_rbf.predict(X_test)
这用于预测您的课程。现在,您可以获取变量y_pred_A_rbf
的值,并将其传递给混淆矩阵,以读取“真肯定”,“真否定”,“假肯定”和“假否定”。 Python中的典型混淆矩阵可以映射到以下图片:
现在,您有了两个实际标签和预测标签数组,可以执行类似 的操作:如果实际标签和预测标签为true,或者换句话说为1,则它们为真实正值,并且正确分类 ,类似地,您可以对真阴性,假阳性和假阴性进行以下操作,以研究对哪些记录进行了正确或不正确的预测和分类。
例如,如果您想知道哪些记录已正确分类为肯定类(在这种情况下,我们可以假设是缺陷),可以执行以下操作:
tp = np.where((y_true == 1) & (y_pred == 1), 'True Positive', 'Else')
您现在将获得已正确分类为肯定类的所有记录的索引。
答案 1 :(得分:1)
如果您正在处理分类问题,只是为了测试模型的准确性和行为使用
from sklearn.metrics import accuracy_score
accuracy_score(y_test,clf.predict(your_X_test))
请参阅我的git链接进行文档分类,我在tfidf / count矢量化器功能之上使用了朴素贝叶斯。
Document classification using MultinomialNB
希望这对您的文档分类有帮助
答案 2 :(得分:1)
您可以使用以下代码来获取被预测为缺陷的记录。我假设X_test是您的测试输入数据。
print(X_test[y_pred_A_rbf==1])
答案 3 :(得分:0)
您有很多方法可以测试y_pred的准确性。基本上,您需要匹配y_pred和y_test。如果您是该领域的新手,并且在解释混淆矩阵和报告时遇到问题,则只需在CSV文件中打印y_pred并将其与y_test进行比较即可。这将为您提供方案的实际情况。
np.savetxt("filename.csv",y_pred,delimiter=",",fmt="%.5f")