【问题标题】:Why is my cross_val_score always different even when I have set my random state beforehand?即使我事先设置了随机状态,为什么我的 cross_val_score 总是不同?
【发布时间】:2019-09-03 22:33:42
【问题描述】:

我对机器学习很陌生,最近遇到了一个我不确定的问题。当我在 Jupyter Notebook 中运行代码(如图所示)时,它每次都会给我不同的分数,我不知道为什么?

我认为通过为 KFold 设置 random_state 或种子,它每次都会给我的 cross_val_score 相同的分数?

results = []
names = []

seed=12

for name, model in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results = cross_val_score(model, X_train, y_train.ravel(), cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = '{}:  score: {:.2f},  std_dev:{:.2f}'.format(name, 
    cv_results.mean(), cv_results.std()) 
    print(msg)

一些示例输出:

LR:  score: -24.69,  std_dev: 19.74  
LASSO:  score: -29.82,  std_dev: 20.94  
EN:  score: -28.59,  std_dev: 19.79  
KNN:  score: -38.66,  std_dev: 28.77  
CART:  score: -16.42,  std_dev: 15.39  
SVR:  score: -60.53,  std_dev: 44.24  

第二次使用相同的代码(同样的种子)运行:

LR:  score: -24.69,  std_dev: 19.74  
LASSO:  score: -29.82,  std_dev: 20.94  
EN:  score: -28.59,  std_dev: 19.79  
KNN:  score: -38.66,  std_dev: 28.77  
CART:  score: -18.65,  std_dev: 17.91  
SVR:  score: -60.53,  std_dev: 44.24

【问题讨论】:

    标签: python scikit-learn cross-validation random-seed scoring


    【解决方案1】:

    kfold = KFold(n_splits=num_folds, random_state=seed)中,我觉得需要加shuffle = True,如果没有,默认shuffle = Falserandom_state无效。

    【讨论】:

      【解决方案2】:

      sklearndecision treesrandom forests 中也依赖于随机性,因此您需要为这些估计器设置随机状态以确保可重复性。

      请注意,其他模型的分数是相同的。

      【讨论】:

      • 非常感谢,我现在就试试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多