Scikit-learn - 可以在没有交叉验证的情况下运行 RandomizedSearchCV 吗?

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

我想知道你是否可以在没有交叉验证的情况下运行 RandomizedSearchCV (仅使用简单的训练/测试分割?

我希望这样做是为了能够确定哪些参数对于更细粒度的调整有用,我将使用标准交叉验证。

这是代码:

pipe = Pipeline(steps=[('gbm', GradientBoostingClassifier())])


param_dist = dict(gbm__max_depth=[3,6,10],
                  gbm__n_estimators=[50,100,500,1000],
                  gbm__min_samples_split=[2,5,8,11],
                  gbm__learning_rate=[0.01,0.05,0.1,0.5,1.0],
                  gbm__max_features=['sqrt', 'log2']
                  )

grid_search = RandomizedSearchCV(pipe, param_distributions=param_dist,cv=???)

grid_search.fit(X_train, y_train)

提前致谢,

python scikit-learn cross-validation
2个回答
0
投票

您可以使用

cv=ShuffleSplit(n_iter=1)
来获得单个随机分割,或者如果您想要进行特定的分割,则使用
cv=PredefinedSplit(...)
(我认为仅在 beta 0.16b1 中)。有关选项,请参阅docs


0
投票

是的,您可以在不使用交叉验证的情况下执行

RandomizedSearchCV
,而是使用简单的训练/测试分割来进行参数调整。

为了实现这一目标,您可以利用

ShuffleSplit
模块中的
sklearn.model_selection
类来创建指定用于参数搜索的单一训练/测试分区。这是实现此方法的方法

仅集成以下代码行之一:

from sklearn.model_selection import ShuffleSplit

my_cv = ShuffleSplit(n_splits=1)
my_cv = ShuffleSplit(n_splits=1, test_size=0.33, random_state=0)

第一个选项在训练集和测试集之间生成随机分离,而第二个选项允许您通过指示所需的测试大小来指定测试集的大小。

随后,您可以在

cv
功能中配置
RandomizedSearchCV
参数,将其设置为
cv=my_cv

另外,有必要强调的是

在这种情况下,

RandomizedSearchCV
会自动为您管理训练/测试拆分。因此,利用完整的数据集非常重要。您应该使用
(X_train, y_train)
来输入随机搜索过程,而不是使用
(features, target)
。这确保了
RandomizedSearchCV
有效地在内部处理数据分区。

以下是修改代码的方法:

pipe = Pipeline(steps=[('gbm', GradientBoostingClassifier())])

my_cv = ShuffleSplit(n_splits=1, test_size=0.33, random_state=0) # <==========

param_dist = dict(gbm__max_depth=[3,6,10],
                  gbm__n_estimators=[50,100,500,1000],
                  gbm__min_samples_split=[2,5,8,11],
                  gbm__learning_rate=[0.01,0.05,0.1,0.5,1.0],
                  gbm__max_features=['sqrt', 'log2']
                  )

grid_search = RandomizedSearchCV(pipe, param_distributions=param_dist,cv=my_cv)

grid_search.fit(features, **target**) # <==========

在此代码中,

cv
表示使用
ShuffleSplit
创建的训练/测试分割,您可以根据自己的喜好自定义
test_size
和其他参数。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.