【问题标题】:Extracting the Classification of a SVM model in python在 python 中提取 SVM 模型的分类
【发布时间】:2018-12-30 12:54:44
【问题描述】:

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

)

谢谢, 尼米什

【问题讨论】:

  • 混淆矩阵和分类报告没有帮助你理解吗?还是您想知道预测为缺陷的实际数据点?

标签: python svm


【解决方案1】:

我没有看到代码的交叉验证部分。假设你已经完成了,它看起来像这样:

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

现在您已经有了两个实际标签和预测标签数组,您可以执行类似 如果实际标签和预测标签为真,或者换句话说 1,那么它们是真阳性并且是正确分类,类似地,您可以对真阴性、假阳性和假阴性进行以下操作,以研究哪些记录被正确或错误地预测和分类。

例如,如果您想知道哪些记录被正确分类为正类(在这种情况下可能让我们假设缺陷),您可以这样做:

tp = np.where((y_true == 1) & (y_pred == 1), 'True Positive', 'Else')

您现在将获得所有已正确分类为正类的记录的索引。

【讨论】:

    【解决方案2】:

    您可以使用以下代码获取预测为缺陷的记录。我假设 X_test 是您的测试输入数据。

    print(X_test[y_pred_A_rbf==1])
    

    【讨论】:

      【解决方案3】:

      如果您处理分类问题只是为了测试模型的准确性和行为,请使用

      from sklearn.metrics import accuracy_score
      accuracy_score(y_test,clf.predict(your_X_test))
      

      请参阅我的 git 链接以了解文档分类我在 tfidf/count 矢量化器功能之上使用了朴素贝叶斯。

      Document classification using MultinomialNB

      希望这对您进行文档分类有所帮助

      【讨论】:

        【解决方案4】:

        您有很多方法可以测试您的 y_pred 的准确度。基本上,您需要匹配 y_pred 和 y_test。如果您是该领域的新手并且在解释混淆矩阵和报告时遇到问题,您可以简单地在 CSV 文件中打印您的 y_pred 并将其与 y_test 进行比较。这将为您提供场景的实际情况。

        np.savetxt("filename.csv",y_pred,delimiter=",",fmt="%.5f")
        

        【讨论】:

          猜你喜欢
          • 2017-08-13
          • 2015-01-09
          • 2018-07-11
          • 2014-05-30
          • 2023-03-18
          • 2018-02-28
          • 2021-08-14
          • 2017-01-31
          • 2013-04-23
          相关资源
          最近更新 更多