我如何正确设置“random_state”以使我的结果始终相同? (蟒蛇,sklearn)

问题描述 投票:0回答:1

例如,如果我有这段代码:

    knn = KNeighborsClassifier()

    grid_search_knn = GridSearchCV(
    estimator=knn,
    n_jobs=-1

)

我必须这样设置吗1.:

knn = KNeighborsClassifier(random_state=42)

grid_search_knn = GridSearchCV(
    estimator=knn,
    n_jobs=-1

)

或者我必须像这样设置2.:

knn = KNeighborsClassifier(random_state=42)

grid_search_knn = GridSearchCV(
    estimator=knn,
    random_state=42,
    n_jobs=-1

)

正确的原因是什么?如果我使用随机搜索而不是网格搜索会怎样?

python machine-learning scikit-learn data-mining sklearn-pandas
1个回答
0
投票

在这种情况下,设置

random_state
取决于您使用的特定算法,而不是
GridSearchCV
RandomizedSearchCV
类。

对于

KNeighborsClassifier
,添加
random_state
实际上是不必要的,因为这个分类器是一种确定性算法,这意味着它不依赖随机性来进行预测。因此,它不会受到
random_state
参数的影响。结果:

  1. 对于

    KNeighborsClassifier
    您根本不需要在分类器或
    random_state
    /
    GridSearchCV
    中设置
    RandomizedSearchCV

  2. 对于随机算法:如果您使用的是涉及随机性的算法,例如决策树或随机森林,则可以在估计器中设置

    random_state
    (例如
    RandomForestClassifier(random_state=42)
    )。您不需要在
    random_state
    中设置
    GridSearchCV
    ,因为它只会影响交叉验证过程,这是确定性的。

总结:

  • 对于
    KNeighborsClassifier
    不需要
    random_state
  • 对于随机算法: 在估计器中设置
    random_state
    ,而不是在
    GridSearchCV
    /
    RandomizedSearchCV
    中。
  • 对于
    RandomizedSearchCV
    如果搜索本身是随机的并且您想要可重复性,则可以在那里设置
    random_state
© www.soinside.com 2019 - 2024. All rights reserved.