首页 > 解决方案 > 使用随机森林作为带有 adaboost 的基础分类器

问题描述

我可以将 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 参数中。如果我使用它会提高准确性吗?

标签: machine-learningscikit-learnclassificationrandom-forestadaboost

解决方案


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

长答案:

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

这就是我的想法:首先,我正在使用交叉验证,所以可能没有过度拟合在雷达下飞行。其次,两者都是集成学习方法,但随机森林是一种装袋方法,而 Adaboost 是一种提升技术。也许他们仍然有足够的不同,让他们的组合有意义?


推荐阅读