为什么即使我事先设置了随机状态,我的cross_val_score总是不同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么即使我事先设置了随机状态,我的cross_val_score总是不同?相关的知识,希望对你有一定的参考价值。

我对机器学习很陌生,最近我遇到了一个我不确定的问题。当我在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
答案

sklearn中,decision treesrandom forests也依赖于随机性,因此您需要为这些估算器设置随机状态以确保重现性。

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

以上是关于为什么即使我事先设置了随机状态,我的cross_val_score总是不同?的主要内容,如果未能解决你的问题,请参考以下文章

成员变量得到一个随机值,即使我在构造函数中初始化它 - 为什么?

即使没有分派任何操作,Redux 状态也会在加载时更改

为啥我的状态值即使在改变状态后也没有改变? [复制]

即使应用处于待售状态,App Store 也不显示我的应用

即使设置为亮,状态栏也保持黑色

为什么我的Recyclerview在随机位置添加新项目?