【问题标题】:Pipeline and GridSearch - pipeline fully recomputed?管道和网格搜索 - 管道完全重新计算?
【发布时间】:2021-09-30 23:05:37
【问题描述】:

我正在使用管道进行网格搜索。管道的一部分是我在管道中进行的特征选择,因此它应用于特定的 CV 折叠而不是完整数据。

管道:

clf = Pipeline([
    ('low_variance', VarianceThreshold(threshold=0)),
    ('feature_importance', 
        SelectMaxFeaturesFromModel(RandomForestClassifier(), threshold='0.75*median')),
    ('classification', xgb)
])

然后在网格搜索中使用此管道。

我的问题是内部如何处理?管道是否只是为每次迭代的每个 CV 折叠完全重新运行?我问是因为实际上的输出是恒定的,因为每个 CV 折叠对于每次迭代都将具有完全相同的输出。例如,在 k 倍 CV 的情况下,恰好有 k 个不同的输出。 (考虑到随机森林的使用,输出甚至可能不是恒定的,而是恒定的 = 每次折叠的相同特征是人们想要的)

因此,与其将运行次数与迭代次数一样多,1 次预先计算的运行就足够了。有这样的功能吗?还是我需要创建自己的选择器?这样的选择器如何知道当前正在运行哪个 CV-fold?

更新:

也许这只是RTFM

文档没有清楚地解释它为每个 CV 折叠缓存一个实例,但我认为是这种情况?

【问题讨论】:

  • 您能否提供完整或更多的 GridSearch 部分代码?

标签: scikit-learn gridsearchcv


【解决方案1】:

对于最初的问题,是的,每个管道步骤都将针对超参数和折叠的每个组合重新计算。

对于更新,是的,您可以缓存管道步骤以防止这种情况发生(尽管您需要从文件中写入/读取的成本,所以这应该只用于昂贵的转换器)。在User Guide 中可以更好地描述其工作原理:

[使用缓存代替改装]如果参数和输入数据相同

因此,是的,您将为每个 cv 折叠拥有单独的缓存,但如果您不搜索转换器超参数,则不是每个超参数。

【讨论】:

    猜你喜欢
    • 2022-12-19
    • 2018-10-21
    • 2016-08-29
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2020-09-01
    • 2019-05-19
    相关资源
    最近更新 更多