【问题标题】:How to use cross_val_score with random_state如何将 cross_val_score 与 random_state 一起使用
【发布时间】:2020-09-05 04:45:26
【问题描述】:

对于不同的运行,我得到不同的值。我在这里做错了什么?

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold, cross_val_score

X = np.random.random((100,5))
y = np.random.randint(0,2,(100,))
cross_val_score = RandomForestClassifier()
cv = StratifiedKFold(y, random_state=1)
s = cross_val_score(cross_val_score, X, y,scoring='roc_auc', cv=cv)
print(s)
# [ 0.42321429  0.44360902  0.34398496]

s = cross_val_score(cross_val_score, X, y, scoring='roc_auc', cv=cv)
print(s)
# [ 0.42678571  0.46804511  0.36090226]

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    您犯的错误是调用RandomForestClassifier,其默认参数random_state 为None。因此,它会选取np.random 生成的种子来生成随机输出。

    StratifiedKFoldRandomForestClassifier 中的 random_state 必须相同,才能产生相等的交叉验证分数数组。

    插图:

    X=np.random.random((100,5))
    y=np.random.randint(0,2,(100,))
    
    clf = RandomForestClassifier(random_state=1)
    cv = StratifiedKFold(y, random_state=1)        # Setting random_state is not necessary here
    s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv)
    print(s)
    ##[ 0.57612457  0.29044118  0.30514706]
    print(s)
    ##[ 0.57612457  0.29044118  0.30514706]
    

    另一种应对方法是不为 RFC 和 SKF 提供 random_state 参数。但是,只需提供np.random.seed(value) 即可在开始时创建随机整数。这些也会在输出中创建相等的数组。

    【讨论】:

    • 哈哈是的,我猜线索就在名字里,它不叫DeterministicForestClassifier是吗?!
    猜你喜欢
    • 2017-09-27
    • 2020-12-10
    • 2021-11-02
    • 2017-07-14
    • 2019-10-11
    • 2021-01-02
    • 1970-01-01
    • 2023-03-13
    • 2014-09-25
    相关资源
    最近更新 更多