为啥我的检测分数很高,尽管在预测过程中有明显的错误分类?
Posted
技术标签:
【中文标题】为啥我的检测分数很高,尽管在预测过程中有明显的错误分类?【英文标题】:Why is my detection score high inspite of obvious misclassifications during prediction?为什么我的检测分数很高,尽管在预测过程中有明显的错误分类? 【发布时间】:2019-10-24 05:00:08 【问题描述】:我正在使用 NSL-KDD 数据集解决入侵分类问题。在应用递归特征消除技术后,我使用了 10 个特征(共 42 个)进行训练,该技术使用随机森林分类器作为估计参数,基尼指数作为分割决策树的标准。训练分类器后,我使用相同的分类器来预测测试数据的类别。我使用 sklearn 的 cross_val_score 的交叉验证分数(准确率、精度、召回率、f 分数)在所有四个分数中都给出了 99% 以上的分数。但是绘制混淆矩阵显示,在假阳性和假阴性值中看到更高的值。显然,它们与准确性和所有这些分数都不匹配。我哪里做错了?
# Train set contain X_train (dataframe of features) and Y_train (series
# of target labels)
# Test set contain X_test and Y_test
# Classifier variable
clf = RandomForestClassifier(n_estimators = 10, criterion = 'gini')
#Training
clf.fit(X_train, Y_train)
# Testing
Y_pred = clf.predict(X_test)
pandas.crosstab(Y_test, Y_pred, rownames = ['Actual'], colnames =
['Predicted'])
# Scoring
accuracy = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'accuracy')
print("Accuracy: %0.5f (+/- %0.5f)" % (accuracy.mean(), accuracy.std() *
2))
precision = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'precision_weighted')
print("Precision: %0.5f (+/- %0.5f)" % (precision.mean(), precision.std()
* 2))
recall = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'recall_weighted')
print("Recall: %0.5f (+/- %0.5f)" % (recall.mean(), recall.std() * 2))
f = cross_val_score(clf, X_test, Y_test, cv = 10, scoring = 'f1_weighted')
print("F-Score: %0.5f (+/- %0.5f)" % (f.mean(), f.std() * 2))
我得到了准确度、精确度、召回率和 f-score
Accuracy 0.99825
Precision 0.99826
Recall 0.99825
F-Score 0.99825
但是,混淆矩阵显示不同
Predicted 9670 41
Actual 5113 2347
我是在整个训练过程中都错了,还是仅仅是由于特征选择不当导致的错误分类问题?
【问题讨论】:
【参考方案1】:您不是在比较相同的结果!对于混淆矩阵,您在 (X_train,Y_train) 上进行训练并在 (X_test,Y_test) 上进行测试。 但是,crossvalscore 在 (X_test,Y_test) 的 k-1 折上拟合估计器,并在 (X_test,Y_test) 的剩余折上对其进行测试,因为 crossvalscore 在您提供的数据集上进行自己的交叉验证(此处为 10 折) .查看 crossvalscore 文档以获得更多解释。
因此,基本上,您不会在相同的数据上拟合和测试您的算法。这可能解释了结果中的一些不一致。
【讨论】:
谢谢。我可能需要再研究一下。【参考方案2】:您的预测值存储在 y_pred 中。
accuracy_score(y_test,y_pred)
只需检查这是否有效......
【讨论】:
以上是关于为啥我的检测分数很高,尽管在预测过程中有明显的错误分类?的主要内容,如果未能解决你的问题,请参考以下文章