【发布时间】:2021-08-30 18:47:25
【问题描述】:
我正在学习机器学习,但遇到了我无法解释的不匹配问题。
根据 GridSearchCV 返回的准确度,我有一个网格来计算最佳模型。
model=sklearn.neighbors.KNeighborsClassifier()
n_neighbors=[3, 4, 5, 6, 7, 8, 9]
weights=['uniform','distance']
algorithm=['auto','ball_tree','kd_tree','brute']
leaf_size=[20,30,40,50]
p=[1]
param_grid = dict(n_neighbors=n_neighbors, weights=weights, algorithm=algorithm, leaf_size=leaf_size, p=p)
grid = sklearn.model_selection.GridSearchCV(estimator=model, param_grid=param_grid, cv = 5, n_jobs=1)
SGDgrid = grid.fit(data1, targetd_simp['VALUES'])
print("SGD Classifier: ")
print("Best: ")
print(SGDgrid.best_score_)
value=SGDgrid.best_score_
print("params:")
print(SGDgrid.best_params_)
print("Best estimator:")
print(SGDgrid.best_estimator_)
y_pred_train=SGDgrid.best_estimator_.predict(data1)
print(sklearn.metrics.confusion_matrix(targetd_simp['VALUES'],y_pred_train))
print(sklearn.metrics.accuracy_score(targetd_simp['VALUES'],y_pred_train))
我得到的结果如下:
SGD Classifier:
Best:
0.38694539229180525
params:
{'algorithm': 'auto', 'leaf_size': 20, 'n_neighbors': 8, 'p': 1, 'weights': 'distance'}
Best estimator:
KNeighborsClassifier(leaf_size=20, n_neighbors=8, p=1, weights='distance')
[[4962 0 0]
[ 0 4802 0]
[ 0 0 4853]]
1.0
可能此模型高度过度拟合。我仍然要检查它,但这不是问题的问题。
所以,基本上,如果我理解正确,GridSearchCV 为交叉验证中的一个块找到了 0.3869 的最佳准确度得分(相当差),但最终的混淆矩阵是完美的,以及它的准确度最终矩阵。这对我来说没有多大意义……这样一个理论上糟糕的模型怎么表现得这么好?
我还在 GridSearchCV 中添加了scoring = 'accuracy' 以确保返回的值实际上是准确的,并且它返回的值完全相同。
我在这里错过了什么?
【问题讨论】:
标签: machine-learning scikit-learn gridsearchcv scoring