【发布时间】:2013-08-20 19:32:09
【问题描述】:
我正在尝试将 AdaBoostClassifier 与 DecisionTree 以外的基础学习器一起使用。我已经尝试过 SVM 和 KNeighborsClassifier,但我得到了错误。 AdaBoostClassifier 可以使用哪些分类器?
【问题讨论】:
标签: machine-learning scikit-learn adaboost
我正在尝试将 AdaBoostClassifier 与 DecisionTree 以外的基础学习器一起使用。我已经尝试过 SVM 和 KNeighborsClassifier,但我得到了错误。 AdaBoostClassifier 可以使用哪些分类器?
【问题讨论】:
标签: machine-learning scikit-learn adaboost
好的,我们有一个系统的方法来找出 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'。
【讨论】:
from sklearn.utils.testint import all_estimators; print(all_estimators(type_filter='classifier'))
from sklearn.utils.testing import all_estimators; print(all_estimators(type_filter='classifier'))
您不应将 SVM 与 Adaboost 一起使用。 Adaboost 应该使用弱分类器。使用 SVM 等分类器会导致过拟合。
【讨论】:
任何支持传递样本权重的分类器都应该可以工作。 SVC 就是这样一种分类器。你得到什么具体的错误信息(和回溯)?您能否为这个错误提供一个简单的重现案例(例如 http://gist.github.com )?
【讨论】:
TypeError: fit() got an unexpected keyword argument 'sample_weight'。这是因为KNeighborsClassifier 不支持加权样本,因此不能与AdaBoostClassifier 一起使用,如其文档字符串中所述。