machine-learning - 使用随机森林作为带有 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 参数中。如果我使用它会提高准确性吗?
解决方案
简短的回答:这并非不可能。不知道理论上这样做有什么问题,但我试过一次,准确率提高了。
长答案:
我在具有 n 行 p 实值特征和长度为 n 的标签列表的典型数据集上进行了尝试。如果重要的话,它们是通过 DeepWalk 算法获得的图中节点的嵌入,并且节点分为两类。我使用 5 折交叉验证在这些数据上训练了一些分类模型,并测量了它们的常用评估指标(精度、召回率、AUC 等)。我使用的模型是 SVM、逻辑回归、随机森林、2 层感知器和带有随机森林分类器的 Adaboost。最后一个模型,带有随机森林分类器的 Adaboost,产生了最好的结果(95% AUC 与多层感知器的 89% 和随机森林的 88% 相比)。当然,现在运行时间增加了 100 倍,但仍然是大约 20 分钟,所以这对我来说不是一个限制。
这就是我的想法:首先,我正在使用交叉验证,所以可能没有过度拟合在雷达下飞行。其次,两者都是集成学习方法,但随机森林是一种装袋方法,而 Adaboost 是一种提升技术。也许他们仍然有足够的不同,让他们的组合有意义?
推荐阅读
- python - 为 Pandas 广播操作指定索引
- jquery - 如何使用 JQuery 点击事件来呈现 JSON 数据?
- android - RxJava - 当另一个流等待第一个项目时,如何缓冲流中的所有项目?
- javafx - 单选按钮不显示彩色文本
- excel - VBA Excel 注释框 - 启用锁定纵横比
- postgresql - 使用 LIMIT 在 JOINED 表中获取 NULL 值
- python - 垃圾邮件过滤器 - Python 新手
- vue.js - 如何使用nuxt i18n?
- python - mypy 错误:Callable 没有属性“__get__”
- javascript - Javascript - 第二个 onclick 音频播放不起作用