使用 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 的范围是使用precision
、recall
、accuracy
或F1 score
等指标 来评估我们算法的性能。
我在您的代码中看到的第一个错误是您在training set
上使用了predict
方法,而这必须用于test set
。
y_pred = fir_svm.predict(x_test_1)
然后基于y_pred
和y_test_1
构建confusion matrix
。
fir_matrix = confusion_matrix(y_test_1, y_pred)
这是正确的方法,因为您需要查看基于validation
应用于未见数据而不是training
数据的算法的性能。
【讨论】:
谢谢~~。这是检查训练数据混淆矩阵的正确方法吗?使用经过训练的分类器来预测它自己的训练数据。 @hanker99,现在我看到您正在使用预测方法来处理火车数据,这是一个错误。 @hanker99,我用适合您的解决方案更新了我的答案。 是的,我知道这样做很奇怪。但是,我渴望了解“训练数据”的混淆矩阵来做进一步的研究。我的大多数项目只需要“测试”的混淆矩阵。我是新手太伤心了哈哈。 @hanker99,回答您的问题:混淆矩阵是一个经常用于描述分类模型性能的表格。使用您创建的混淆矩阵,我们可以看到算法的准确率、精度、召回率和 F1 分数。以上是关于使用 sklearn SVC 计算训练集的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章