【问题标题】:Different score every time I run sklearn model with random_state set每次我使用 random_state 集运行 sklearn 模型时得分不同
【发布时间】:2017-09-14 12:56:04
【问题描述】:

我试图确定为什么每次我重新运行一个模型时,我得到的分数都会略有不同。我已经定义了:

# numpy seed (don't know if needed, but figured it couldn't hurt)
np.random.seed(42)
# Also tried re-seeding every time I ran the `cross_val_predict()` block, but that didn't work either

# cross-validator with random_state set
cv5 = KFold(n_splits=5, random_state=42, shuffle=True)

# scoring as RMSE of natural logs (to match Kaggle competition I'm trying)
def custom_scorer(actual, predicted):    
    actual = np.log1p(actual)
    predicted = np.log1p(predicted)
    return np.sqrt(np.sum(np.square(actual-predicted))/len(actual))

然后我用cv=cv5 运行了这个一次:

# Running GridSearchCV
rf_test = RandomForestRegressor(n_jobs = -1) 
params = {'max_depth': [20,30,40], 'n_estimators': [500], 'max_features': [100,140,160]} 
gsCV = GridSearchCV(estimator=rf_test, param_grid=params, cv=cv5, n_jobs=-1, verbose=1) 
gsCV.fit(Xtrain,ytrain)
print(gsCV.best_estimator_)

在运行得到gsCV.best_estimator_之后,我重新运行了几次,每次得到的分数略有不同:

rf_test = gsCV.best_estimator_
rf_test.random_state=42
ypred = cross_val_predict(rf_test, Xtrain, ytrain, cv=cv2)
custom_scorer(np.expm1(ytrain),np.expm1(ypred))

(极小)分数差异示例:

0.13200993923446158
0.13200993923446164
0.13200993923446153
0.13200993923446161

我正在尝试设置种子,以便每次为同一模型获得相同的分数,以便能够比较不同的模型。在 Kaggle 比赛中,分数的微小差异似乎很重要(尽管公认不是这么小),但我只是想了解原因。执行计算时是否与我的机器中的舍入有关?非常感谢任何帮助!

编辑:我忘记了rf_test.random_state=42这行,它在分数差异上产生了更大的差异,但即使包括这行,我仍然有微小的差异。

【问题讨论】:

    标签: python-3.x scikit-learn scoring random-seed


    【解决方案1】:

    随机森林,是一组决策树,它使用随机性来选择这些树的高度和分裂。当你运行你的程序两次时,你真的不太可能得到相同的随机森林。我认为,您因此而得到了这种轻微的变化。

    【讨论】:

    • 我设置了rf_test.random_state=42。这个设置不就是你说的目的吗?
    • 你是对的杰克,根据随机森林文档“如果 int,random_state 是随机数生成器使用的种子”。请忽略以上答案。
    【解决方案2】:

    您在测试 RandomForest 回归器时使用 cv2。您是否也设置了它的随机种子?否则,在测试你的回归器时分裂会有所不同。

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 1970-01-01
      • 2022-07-22
      • 2016-12-31
      • 2019-09-10
      • 2020-06-23
      • 2015-04-24
      • 1970-01-01
      • 2020-02-03
      相关资源
      最近更新 更多