例如,如果我有这段代码:
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
)
正确的原因是什么?如果我使用随机搜索而不是网格搜索会怎样?
在这种情况下,设置
random_state
取决于您使用的特定算法,而不是 GridSearchCV
或 RandomizedSearchCV
类。
对于
KNeighborsClassifier
,添加random_state
实际上是不必要的,因为这个分类器是一种确定性算法,这意味着它不依赖随机性来进行预测。因此,它不会受到 random_state
参数的影响。结果:
对于
KNeighborsClassifier
: 您根本不需要在分类器或random_state
/GridSearchCV
中设置RandomizedSearchCV
。
对于随机算法:如果您使用的是涉及随机性的算法,例如决策树或随机森林,则可以在估计器中设置
random_state
(例如 RandomForestClassifier(random_state=42)
)。您不需要在 random_state
中设置 GridSearchCV
,因为它只会影响交叉验证过程,这是确定性的。
总结:
KNeighborsClassifier
: 不需要 random_state
。random_state
,而不是在 GridSearchCV
/RandomizedSearchCV
中。RandomizedSearchCV
: 如果搜索本身是随机的并且您想要可重复性,则可以在那里设置 random_state
。