Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么我的检测分数很高,尽管在预测过程中存在明显的错误分类?_Python 3.x_Machine Learning_Scikit Learn_Cross Validation - Fatal编程技术网

Python 3.x 为什么我的检测分数很高,尽管在预测过程中存在明显的错误分类?

Python 3.x 为什么我的检测分数很高,尽管在预测过程中存在明显的错误分类?,python-3.x,machine-learning,scikit-learn,cross-validation,Python 3.x,Machine Learning,Scikit Learn,Cross Validation,我正在使用NSL-KDD数据集研究入侵分类问题。在应用递归特征消除技术后,我使用了10个特征(42个特征中的10个)进行训练,使用随机森林分类器作为估计参数,基尼指数作为分割决策树的标准。在训练分类器之后,我使用相同的分类器来预测测试数据的类别。我使用sklearn的cross_val_分数得出的交叉验证分数(准确性、精确性、召回率、f分数)在所有四个分数中都超过99%。但绘制混淆矩阵显示,假阳性和假阴性值中的值较高。很明显,他们的准确度和所有这些分数都不匹配。我哪里做错了 # Train se

我正在使用NSL-KDD数据集研究入侵分类问题。在应用递归特征消除技术后,我使用了10个特征(42个特征中的10个)进行训练,使用随机森林分类器作为估计参数,基尼指数作为分割决策树的标准。在训练分类器之后,我使用相同的分类器来预测测试数据的类别。我使用sklearn的cross_val_分数得出的交叉验证分数(准确性、精确性、召回率、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分数

Accuracy 0.99825 
Precision 0.99826
Recall 0.99825
F-Score 0.99825
然而,混淆矩阵却显示了另一种情况

Predicted 9670    41
Actual    5113    2347

我训练的全部内容都是错误的,还是仅仅是由于特征选择不当造成的错误分类问题?

您没有比较相同的结果!对于混淆矩阵,您在(X_-train,Y_-train)上进行训练,在(X_-test,Y_-test)上进行测试。 但是,crossvalscore在k-1倍(X_检验,Y_检验)上拟合估计器,并在剩余的倍(X_检验,Y_检验)上测试估计器,因为crossvalscore在您提供的数据集上进行自己的交叉验证(此处为10倍)。查看crossvalscore文档了解更多解释


因此,基本上,您不能在相同的数据上拟合和测试您的算法。这可能解释了结果中的一些不一致性。

您没有比较相同的结果!对于混淆矩阵,您在(X_-train,Y_-train)上进行训练,在(X_-test,Y_-test)上进行测试。 但是,crossvalscore在k-1倍(X_检验,Y_检验)上拟合估计器,并在剩余的倍(X_检验,Y_检验)上测试估计器,因为crossvalscore在您提供的数据集上进行自己的交叉验证(此处为10倍)。查看crossvalscore文档了解更多解释


因此,基本上,您不能在相同的数据上拟合和测试您的算法。这可能解释了结果中的一些不一致性。

您的预测值存储在y_pred中

accuracy_score(y_test,y_pred)

只需检查这是否有效…

您的预测值存储在y\u pred中

accuracy_score(y_test,y_pred)

只要检查一下这是否有效…

谢谢。我可能得再仔细研究一下。谢谢。我可能得再仔细研究一下。