如果我在RandomSearch优化装袋中使用max_features参数,bootstrap_features参数是否有用?

时间:2019-02-05 07:59:56

标签: python-3.x scikit-learn

我了解为什么我可以同时使用max_samples和bootstrap。例如,我可能有“ n”个样本,并且是否使用引导程序将改变单个估计器和整个集合的预测。但是在功能方面应该有一些意义吗?还是依赖估算器?因为我认为估算器是否为树是没有意义的。

#BaggingRegressor
bagging_regressor = BaggingRegressor(oob_score=False, warm_start=False)
bagging_regressor_params = {
    'n_estimators'       : list(range(10, 3000, 50)),
    'max_samples'        : np.arange(1e-2, 1+1e-2, 1e-2),
    'max_features'       : np.arange(1e-2, 1+1e-2, 1e-2),
    'bootstrap'          : [True, False],
    'bootstrap_features' : [True, False],
    'base_estimator'     : [DecisionTreeRegressor(criterion=criterion, 
                            splitter=splitter, max_depth=max_depth) \
                            for criterion in ['mse', 'friedman_mse', 'mae'] \
                            for splitter in ['best', 'random'] \
                            for max_depth in range(1,10)
                            ]
    }

1 个答案:

答案 0 :(得分:0)

请注意bootstrap_features;默认情况下将其设置为False可能是有原因的。我找不到任何文献或文档解释为什么这样做会有用。因此,请带着一粒盐来回答这个问题。它不是基于权威文献,而是基于我自己的想法。

什么是功能自举?

要在整体中训练单个模型,请随机选择特征子集。引导意味着选择功能并进行替换。这意味着该模型可以获取相同功能的重复项。

出什么问题了?

  • 某些模型对重复功能过敏。例如LinearDiscriminantAnalysis发出警告,指出变量是共线的。
  • 某些型号不在乎。例如,CART树选择最佳功能进行拆分,因此功能是否出现两次都没有关系。

为什么引导功能很有用?

  • 一些决策树随机选择要素。具有重复功能会增加选择此功能的机会。
  • 减少偏差,增加方差。诸如Bagging之类的集成方法的目的是求平均多个低偏差/高方差模型。原则上,重复特征可以通过增加模型中拟合系数的数量来增加模型的方差。
  • 增加模型之间的差异。对固定数量的要素进行采样而不进行替换所导致的可能组合比与对相同数量的要素进行采样所导致的更少。 (例如,有5种组合从5种特征中选择4种而不进行替换。但是有70种组合从5种特征中选择4种而不进行替换)。

就我个人而言,我不认为上述原因非常有用。通常,您可以通过引导样本而不是特征来控制可变性和模型过度拟合。除非您有充分的理由(文学,理论上的考虑)使用它,否则我将离开bootstrap_features=False