使用 sklearn SVC 计算训练集的混淆矩阵

Posted

技术标签:

【中文标题】使用 sklearn SVC 计算训练集的混淆矩阵【英文标题】:Calculate confusion_matrix for Training set with sklearn SVC 【发布时间】:2020-05-22 03:45:49 【问题描述】:

我想通过了解训练数据的混淆矩阵来了解它的分布。但是,我不确定“train_ypre = fir_svm.predict(x_train_1)”是对还是错。

#first stage (asymmetric SVM)
# https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html : class_weight=0:minority,1:majprity

fir_svm = SVC(C=10.0,gamma =1,kernel="rbf").fit(x_train_1,y_train_1)
train_fir_score = fir_svm.score(x_train_1,y_train_1)
test_fir_score = fir_svm.score(x_test_1,y_test_1)
print("First SVM score (train) : 0".format(train_fir_score))
print("First SVM score (test): 0".format(test_fir_score))
#----------------------------------------------------------
# train (first stage)
train_ypre = fir_svm.predict(x_train_1)
fir_matrix_train = confusion_matrix(y_train_1, train_ypre)
#------------------------------------------------------------------------
# train_ypre = fir_svm.predict(x_test_1)
# fir_matrix_train = confusion_matrix(y_test_1, train_ypre)
#------------------------------------------------------------------------
print(fir_matrix_train)
TP = fir_matrix_train[0][0]
# print(TP)
FN = fir_matrix_train[0][1]
# print(FN)
FP = fir_matrix_train[1][0]
# print(FP)
TN = fir_matrix_train[1][1]
# print(TN)
precision = TP / (TP+FP) 
print("Precision : 0".format(precision))
recall = TP / (TP+FN)
print("Recall : 0".format(recall))
F_measure = 2*recall*precision / (recall+precision)
print("F_measure : 0".format(F_measure))
auc = roc_auc_score(y_train_1, train_ypre)
print("AUC : 0".format(auc))
# auc = roc_auc_score(y_test_1, train_ypre)
# print("AUC : 0".format(auc))

还有其他方法可以进一步了解训练数据的混淆矩阵吗?

【问题讨论】:

能否请您编写代码而不是包含图像?请记住,为了让人们重现错误,他们应该能够复制粘贴您的代码! :) 【参考方案1】:

confusion matrix 是一个经常用于描述分类模型性能的表格。

创建confusion matrix 的范围是使用precisionrecallaccuracyF1 score指标 来评估我们算法的性能。

我在您的代码中看到的第一个错误是您在training set 上使用了predict 方法,而这必须用于test set

y_pred = fir_svm.predict(x_test_1)

然后基于y_predy_test_1构建confusion matrix

fir_matrix = confusion_matrix(y_test_1, y_pred)

这是正确的方法,因为您需要查看基于validation 应用于未见数据而不是training 数据的算法的性能。

【讨论】:

谢谢~~。这是检查训练数据混淆矩阵的正确方法吗?使用经过训练的分类器来预测它自己的训练数据。 @hanker99,现在我看到您正在使用预测方法来处理火车数据,这是一个错误。 @hanker99,我用适合您的解决方案更新了我的答案。 是的,我知道这样做很奇怪。但是,我渴望了解“训练数据”的混淆矩阵来做进一步的研究。我的大多数项目只需要“测试”的混淆矩阵。我是新手太伤心了哈哈。 @hanker99,回答您的问题:混淆矩阵是一个经常用于描述分类模型性能的表格。使用您创建的混淆矩阵,我们可以看到算法的准确率、精度、召回率和 F1 分数。

以上是关于使用 sklearn SVC 计算训练集的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章

机器学习sklearn----支持向量机SVC模型评估指标

机器学习sklearn----支持向量机SVC模型评估指标

机器学习sklearn----支持向量机SVC模型评估指标

sklearn:绘制跨训练+测试集组合的混淆矩阵

tensorflow 使用混淆矩阵进行评估

使用 sklearn 使用 Keras 数据生成器绘制混淆矩阵