我在用管道做网格搜索。流水线的一部分是特征选择,这是我在流水线中做的,所以它被应用于特定的CV-fold,而不是整个数据。
管道:
clf = Pipeline([
('low_variance', VarianceThreshold(threshold=0)),
('feature_importance',
SelectMaxFeaturesFromModel(RandomForestClassifier(), threshold='0.75*median')),
('classification', xgb)
])然后在网格搜索中使用这条管线线。
我的问题是这是如何在内部处理的?流水线是不是在每次迭代中完全重新运行每一个CV-fold?我之所以问这个问题,是因为现实中的输出是恒定的,因为每个CV-fold在每次迭代中都会有完全相同的输出。例如,在k倍CV的情况下,恰好有k个不同的输出。(考虑到随机森林的使用,输出可能甚至不是恒定的,但恒定=每个折叠的相同特征是人们想要的)
因此,不是像迭代一样多次运行这个程序,只需预计算一次就足够了。这样的功能是否存在?或者我需要创建自己的选择器?这样的选择器如何知道当前运行的是哪个CV-fold?
更新:
也许这只是RTFM
文档没有清楚地解释它为每个CV-fold缓存一个实例,但我假设是这样的?
发布于 2021-09-30 15:05:38
对于最初的问题,是的,对于每个超参数和折叠的组合,每个管道步骤都将重新计算。
对于更新,是的,你可以缓存管道步骤来防止这种情况(尽管这样你就有了从文件中写入/读取的成本,所以这应该只针对昂贵的转换器)。在User Guide中可以更好地描述它是如何工作的
如果参数和输入数据相同,则使用缓存而不是重新调整
因此,是的,每个cv-fold都有单独缓存,但如果不搜索Transformer超参数,就不会有每个超参数。
https://stackoverflow.com/questions/69388476
复制相似问题