具有不同基础学习器的 AdaBoostClassifier

Posted

技术标签:

【中文标题】具有不同基础学习器的 AdaBoostClassifier【英文标题】:AdaBoostClassifier with different base learners 【发布时间】:2013-08-20 19:32:09 【问题描述】:

我正在尝试将 AdaBoostClassifier 与 DecisionTree 以外的基础学习器一起使用。我已经尝试过 SVM 和 KNeighborsClassifier,但我得到了错误。 AdaBoostClassifier 可以使用哪些分类器?

【问题讨论】:

【参考方案1】:

好的,我们有一个系统的方法来找出 AdaBoostClassifier 支持的所有基础学习器。兼容的base learner的fit方法需要支持sample_weight,运行如下代码即可获得:

import inspect
from sklearn.utils.testing import all_estimators
for name, clf in all_estimators(type_filter='classifier'):
    if 'sample_weight' in inspect.getargspec(clf().fit)[0]:
       print name

这会产生以下输出:

AdaBoostClassifier,
BernoulliNB,
DecisionTreeClassifier,
ExtraTreeClassifier,
ExtraTreesClassifier,
MultinomialNB,
NuSVC,
Perceptron,
RandomForestClassifier,
RidgeClassifierCV,
SGDClassifier,
SVC.

如果分类器没有实现predict_proba,则必须设置 AdaBoostClassifier 参数 algorithm = 'SAMME'。

【讨论】:

LinearSVC: 取决于损失 ;) 但你可能会使用 LogisticRegression 类。 GMM 不是分类器。您是如何选择要测试的课程的? utils.testing 中有一个迭代器,用于迭代所有分类器;) 谢谢,安德烈亚斯。无论选择何种损失,LinearSVC 都不支持 sample_weight。是的,GMM 不是分类器 :) 我已经把它拿出来了。我实际上想尝试所有可用的分类器,看看哪些可以用作基础学习器。这些是我通过查看 scikit 网站可以识别的。 嗯,LinearSVC 是对的。还有很多分类器:from sklearn.utils.testint import all_estimators; print(all_estimators(type_filter='classifier')) 谢谢,这是列出所有分类器的好方法。 sn-p中的testint需要进行测试,即from sklearn.utils.testing import all_estimators; print(all_estimators(type_filter='classifier'))【参考方案2】:

您不应将 SVM 与 Adaboost 一起使用。 Adaboost 应该使用弱分类器。使用 SVM 等分类器会导致过拟合。

【讨论】:

有人可以提供一个参考,说明“使用像 SVM 这样的分类器会导致过度拟合”。在adaboodt?【参考方案3】:

任何支持传递样本权重的分类器都应该可以工作。 SVC 就是这样一种分类器。你得到什么具体的错误信息(和回溯)?您能否为这个错误提供一个简单的重现案例(例如 http://gist.github.com )?

【讨论】:

是的,你是对的,它适用于 SVC。早些时候,我正在创建这样的分类器: clf = AdaBoostClassifier(n_estimators=100, base_estimator=SVC());这不计算概率。但是,将其更改为: clf = AdaBoostClassifier(n_estimators=100, base_estimator=SVC(probability=True));我跑得很干净。 我仍然遇到 KNeighborsClassifier 的问题。代码片段和回溯发布在:gist.github.com/vijayvd/6269621 错误信息是:TypeError: fit() got an unexpected keyword argument 'sample_weight'。这是因为KNeighborsClassifier 不支持加权样本,因此不能与AdaBoostClassifier 一起使用,如其文档字符串中所述。 为 KNeighborsClassifier 实现样本权重应该非常简单。不过,我不知道增强型 KNN 是什么样的。你确定这是个好主意吗? 我使用 KNN 获得了不错的分数,并且正在考虑使用 adaboost 来改进它。但没有特别的理由相信它会表现良好。

以上是关于具有不同基础学习器的 AdaBoostClassifier的主要内容,如果未能解决你的问题,请参考以下文章

如何使用矩阵作为 MATLAB 分类学习器的预测器?

Ensemble learning(集成学习)

使用具有不同分类器的 sklearn precision_recall_curve 函数

Power BI中常规切片器的使用方法及视觉效果

机器学习数学基础: 数据生成器与学习器的关系

具有独特着色器的 OpenGL 多次绘制调用会产生空白屏幕