【发布时间】:2021-01-06 23:37:58
【问题描述】:
我正在尝试使用网格搜索优化算法的参数,但是,当我应用优化参数时得到的结果远低于网格搜索得到的结果。我知道这可能是因为网格搜索的交叉验证。有什么方法可以避免这种差异并在我的预测和网格搜索中获得大致相同的结果?
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.33,
random_state=42)
gbc = GradientBoostingClassifier()
parameters = {'learning_rate':[0.01, 0.05, 0.1, 0.5, 1],
'min_samples_split':[2,5,10,20],
'max_depth':[2,3,5,10]}
clf = GridSearchCV(gbc, parameters, cv=3, scoring='f1')
clf.fit(X_train, y_train)
print("Best parameter (CV score=%0.3f):" % clf.best_score_)
# Best parameter (CV score=0.737)
gbc_tunned = gbc.set_params(**clf.best_params_)
gbc_tunned .fit(X_train,y_train.values.ravel())
ypred_test = lgbc_tunned .predict(X_test)
print(f1_score(y_test,ypred_test))
# 0.7008433734939759
【问题讨论】:
-
两个结果之间的差异来自 a) 来自不同的
random_state和 b) 因为在GridSearchCV中,您通过交叉验证 (CV) 计算分数,而在另一种情况下一次完整的数据集。 -
从统计上讲,0.701 并不完全比 0.737“低很多”...
标签: python machine-learning optimization scikit-learn parameters