簡體   English   中英

即使我事先設置了隨機狀態,為什么我的 cross_val_score 總是不同?

[英]Why is my cross_val_score always different even when I have set my random state beforehand?

我對機器學習很陌生,最近遇到了一個我不確定的問題。 當我在 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決策樹隨機森林也依賴於隨機性,因此您需要為這些估計器設置隨機狀態以確保可重復性。

請注意,其他模型的分數相同。

kfold = KFold(n_splits=num_folds, random_state=seed) ,我認為您需要添加shuffle = True ,如果沒有,默認情況下shuffle = False並且random_state無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM