【问题标题】:can't reproduce results from gridsearch无法重现网格搜索的结果
【发布时间】: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


【解决方案1】:

为了能够重现结果,您需要为 GradientBoostingClassifier 修复 random_state

gbc = GradientBoostingClassifier(random_state=42)

还有一个很好的做法是在开头为 numpy 修复 random seed

numpy.random.seed(42)

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2013-04-02
    • 2022-09-28
    • 2021-07-02
    • 2021-01-01
    相关资源
    最近更新 更多