Scikit学习-你能在没有交叉验证的情况下运行RandomizedSearchCV吗



我想知道你是否可以在没有交叉验证的情况下运行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)

提前感谢,

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

是的,您可以在不使用交叉验证的情况下执行RandomizedSearchCV,而是使用简单的训练/测试分割进行参数调整。

为了实现这一点,您可以利用sklearn.model_selection模块中的ShuffleSplit类来创建指定用于参数搜索的单一训练/测试分区。以下是实现此功能的方法

仅集成以下代码行之一:

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)

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

随后,您可以通过将RandomizedSearchCV函数中的cv参数设置为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和其他参数。

希望这能有所帮助!

相关内容

  • 没有找到相关文章