【问题标题】:Accuracy in Classfication Report lower than best estimator from GridSearchCV分类报告中的准确性低于 GridSearchCV 的最佳估计器
【发布时间】:2021-12-30 13:49:37
【问题描述】:

我对 MLPClassifier 执行了网格搜索。

为什么分类报告中的准确率 (0.76) 与数据帧中的最高拆分测试分数(在本例中为 0.80)不同?

输出:

代码:

X, y = make_classification(n_samples=200, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=1)
param_grid = {'learning_rate_init': [1e-5,1e-4], 'hidden_layer_sizes': [(50,),(50,50)],'max_iter':[100], 'activation':['logistic','relu']} 

print("Finding optimal Hyper-parameters within the specified grid...")
grid = GridSearchCV(MLPClassifier(),param_grid,verbose=0, cv=5, scoring='accuracy')
a = grid.fit(X_train,y_train)
grid_predictions = a.best_estimator_.predict(X_test)

cm = sklearn.metrics.confusion_matrix(y_test, grid_predictions)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=grid.classes_)
disp.plot(cmap='Blues')
plt.show()

print(sklearn.metrics.classification_report(y_test,grid_predictions, digits=6))
print("BEST PARAMETERS FOUND:",format(grid.best_params_))
print("BEST - Mean Accuracy:",format(round(grid.cv_results_['mean_test_score'][grid.best_index_],6)))
print("BEST - Standard Deviation Accuracy:",format(round(grid.cv_results_['std_test_score'][grid.best_index_],3)))
print("BEST - Mean Time:{}s".format(round(grid.cv_results_['mean_fit_time'][grid.best_index_],3)))
print("BEST - Standard Deviation Time:{}s".format(round(grid.cv_results_['std_fit_time'][grid.best_index_],3)))

pd.DataFrame(grid.cv_results_)

【问题讨论】:

  • 应该报告的是 mean 分数,而不是任何单个拆分中的分数(例如您在此处突出显示的split0);所以这里 是 一个问题(即为什么混淆矩阵显示的准确度为 0.76,而不是 0.646667 的平均值),但不是你要问的那个......
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python machine-learning scikit-learn neural-network


【解决方案1】:

在您的报告中,您使用的是测试集(X_test 和 y_test),这些数据在网格搜索中根本看不到(如预期的那样),然后您在 2 个不同的数据集上运行一个分类任务,绝对不能保证那个分数是完全一样的。在这种情况下,它在测试集上较低,它可能是相反的,尽管由于您在所有拆分中取得最高结果,它可能高于在像您的测试集这样的新随机数据集上。 您可能应该将报告中的结果与 mean_test_score 进行比较,而不是在您的情况下实际上更低。

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2021-10-27
    • 2022-07-19
    • 2020-01-10
    • 2019-11-22
    • 1970-01-01
    • 2019-09-03
    • 2013-05-25
    相关资源
    最近更新 更多