【发布时间】:2021-12-31 17:27:32
【问题描述】:
我试图对参数进行超调,但是在我这样做之后,准确度分数根本没有改变,我做错了什么?
# Log reg
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(C=0.3326530612244898,max_iter=100,tol=0.01)
logreg.fit(X_train,y_train)
from sklearn.metrics import confusion_matrix
y_pred = logreg.predict(X_test)
print('Accuracy of log reg is: ', logreg.score(X_test,y_test))
confusion_matrix(y_test,y_pred)
# 0.9181286549707602 - acurracy before tunning
输出:
Accuracy of log reg is: 0.9181286549707602
array([[ 54, 9],
[ 5, 103]])
这是我使用 Grid Search CV:
from sklearn.model_selection import GridSearchCV
params ={'tol':[0.01,0.001,0.0001],
'max_iter':[100,150,200],
'C':np.linspace(1,20)/10}
grid_model = GridSearchCV(logreg,param_grid=params,cv=5)
grid_model_result = grid_model.fit(X_train,y_train)
print(grid_model_result.best_score_,grid_model_result.best_params_)
输出:
0.8867405063291139 {'C': 0.3326530612244898, 'max_iter': 100, 'tol': 0.01}
【问题讨论】:
-
所以第一次acc是:
0.9181286549707602,第二次acc是:0.8867405063291139? -
在 GridSearchCV 期间,您执行 5 倍交叉验证,这意味着 80% 的 X_train 将用于训练您的逻辑回归算法,而第一个输出基于 100% 训练的模型X_火车。因此,训练期间这 20% 的数据差异可能会导致评估准确度的差异。
-
@meistef 所以 GridSearchCV 总是有可能导致精度降低?我虽然总是应该提高准确性
-
@RuslanPylypiuk GridSearchCV 的原理是找到可以确保获得最高准确度的最佳超参数集。但是在这里,您采用了最优参数集,然后使用这些最优参数在更多数据上重新训练模型(完整的 X_train 集而不是 80% X_train 集)。第一个模型有机会从更多数据以及最佳超参数中学习。两个实例之间的准确性差异很小,我并不感到惊讶。
-
@meistef 我该如何训练剩下的 80%?
标签: machine-learning scikit-learn grid-search gridsearchcv