在python

时间:2018-12-24 05:40:16

标签: python svm

我第一次在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)

谢谢你, 尼米什人

4 个答案:

答案 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中的典型混淆矩阵可以映射到以下图片:

Confusion Matrix in 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")