具有不同基础学习器的 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的主要内容,如果未能解决你的问题,请参考以下文章