使用随机森林作为带有 adaboost 的基础分类器

Posted

技术标签:

【中文标题】使用随机森林作为带有 adaboost 的基础分类器【英文标题】:using random forest as base classifier with adaboost 【发布时间】:2021-07-02 17:33:55 【问题描述】:

我可以将 AdaBoost 与随机森林一起用作基础分类器吗?我在互联网上搜索,我没有找到任何人这样做。

就像下面的代码;我尝试运行它,但它需要很多时间:

estimators = Pipeline([('vectorizer', CountVectorizer()),
                       ('transformer', TfidfTransformer()),
                       ('classifier', AdaBoostClassifier(learning_rate=1))])

RF=RandomForestClassifier(criterion='entropy',n_estimators=100,max_depth=500,min_samples_split=100,max_leaf_nodes=None,
                          max_features='log2')


param_grid=
    'vectorizer__ngram_range': [(1,2),(1,3)],
    'vectorizer__min_df': [5],
    'vectorizer__max_df': [0.7],
    'vectorizer__max_features': [1500],

    'transformer__use_idf': [True , False],
    'transformer__norm': ('l1','l2'),
    'transformer__smooth_idf': [True , False],
     'transformer__sublinear_tf': [True , False],

    'classifier__base_estimator':[RF],
    'classifier__algorithm': ("SAMME.R","SAMME"),
    'classifier__n_estimators':[4,7,11,13,16,19,22,25,28,31,34,43,50]

我尝试使用 GridSearchCV,将 RF 分类器添加到 AdaBoost 参数中。 如果我使用它会提高准确性吗?

【问题讨论】:

【参考方案1】:

简短回答: 这并非不可能。 不知道理论上这样做有没有问题,但是我试了一次,准确率提高了。

长答案:

我在具有 n 行 p 实值特征和长度为 n 的标签列表的典型数据集上进行了尝试。如果重要的话,它们是通过 DeepWalk 算法获得的图中节点的嵌入,并且节点分为两类。我使用 5 折交叉验证在这些数据上训练了一些分类模型,并测量了它们的常用评估指标(精度、召回率、AUC 等)。我使用的模型是 SVM、逻辑回归、随机森林、2 层感知器和带有随机森林分类器的 Adaboost。最后一个模型,带有随机森林分类器的 Adaboost,产生了最好的结果(95% AUC 与多层感知器的 89% 和随机森林的 88% 相比)。当然,现在运行时间增加了 100 倍,但仍然是 20 分钟左右,所以这对我来说不是一个限制。

以下是我的想法:首先,我正在使用交叉验证,因此可能不会出现过拟合现象。其次,两者都是集成学习方法,但随机森林是一种装袋方法,而 Adaboost 是一种提升技术。也许它们仍然有足够的不同以使它们的组合有意义?

【讨论】:

【参考方案2】:

难怪您实际上没有看到任何人这样做 - 这是一个荒谬和糟糕的主意。

您正在尝试构建一个集成 (Adaboost),它本身由集成基分类器 (RF) 组成 - 本质上是一个“集成平方”;所以,难怪计算时间长。

但即使它是实用的,也有很好的理论理由这样做;引用我在Execution time of AdaBoost with SVM base classifier 中的回答:

Adaboost(和类似的集成方法)是使用决策树作为基础分类器(更具体地说,决策 stumps,即深度仅为 1 的 DTs)构思的;如果您没有明确指定base_classifier 参数,那么今天仍然有充分的理由假设DecisionTreeClassifier(max_depth=1) 的值。 DT 适合这种集成,因为它们本质上是不稳定分类器,而 SVM 则不是这种情况,因此后者在用作基分类器时预计不会提供太多。

最重要的是,SVM 在计算上比决策树(更不用说决策stumps)要昂贵得多,这就是您观察到处理时间长的原因。

该论点也适用于 RF - 它们不是不稳定分类器,因此在将它们用作提升算法(如 Adaboost)的基础分类器时,没有任何理由真正期望性能改进。

【讨论】:

以上是关于使用随机森林作为带有 adaboost 的基础分类器的主要内容,如果未能解决你的问题,请参考以下文章

随机森林和Adaboost的对比

随机森林与Adaboost

随机森林和adaboost对比

OpenCV3 SVM ANN Adaboost KNN 随机森林等机器学习方法对OCR分类

第九篇:随机森林(Random Forest)

机器学习系列-Bagging与随机森林