AdaBoostClassifier 和“SAMME.R”算法

AdaBoostClassifier and the 'SAMME.R’ Algorithm

进入实际问题需要一段时间,所以请耐心等待。 The AdaBoost documentation 声明它“是一个元估计器,它首先在原始数据集上拟合一个 classifier,然后在同一数据集上拟合 classifier 的额外副本,但其中权重错误 class 化的实例进行了调整”。为此,必需的参数之一是 base_estimatorbase_estimator 可与 AdaBoostClassifer、"support for sample weighting is required" 一起使用。

所以我的第一个问题是 - 哪些 classifier 支持样本加权?我做了一些研究,幸运的是,someone smarter than me had the answer。有点更新,它是这样工作的:运行ning

from sklearn.utils.testing import all_estimators 

print(all_estimators(type_filter='classifier'))

您会得到一个包含所有 classifier 的列表(原来有 31 个!)。那么,如果你 运行

import inspect

for name, clf in all_estimators(type_filter='classifier'):
    if 'sample_weight' in inspect.getfullargspec(clf().fit)[0]:
        print(name)

您可以获得所有支持样本加权的 class 化器的列表(其中 21 个,出于好奇)。

到目前为止一切顺利。但现在我们必须处理另一个 AdaBoostClassifer 参数,即 algorithm。您有两个选择:{‘SAMME’, ‘SAMME.R’}, optional (default=’SAMME.R’)。我们被告知 "use the SAMME.R real boosting algorithm base_estimator must support calculation of class probabilities"。这就是我被困的地方。在网上搜索,我只能找到两个 classifiers 与 'SAMME.R' 一起用作 algorithm 的参数:DecisionTreeClassifier(默认)和 RandomForestClassifier .

所以问题来了 - 21 种与 AdaBoostClassifer 兼容的 class 其他哪些 class 提供对 class 概率计算的支持?

谢谢。

我很确定当文档提到 "must support calculation of class probabilities" 时,他们的意思是有一个 predict_proba 方法。

这是许多 class 作者用来 return 每个 class 给定观察的概率的方法。有了这种理解,您只需要检查具有 predict_proba 方法的 classifiers:

for name, clf in all_estimators(type_filter='classifier'):
    if hasattr(clf, 'predict_proba'):
        print(clf, name)

<class 'sklearn.ensemble.weight_boosting.AdaBoostClassifier'> AdaBoostClassifier

<class 'sklearn.ensemble.bagging.BaggingClassifier'> BaggingClassifier
<class 'sklearn.naive_bayes.BernoulliNB'> BernoulliNB
<class 'sklearn.calibration.CalibratedClassifierCV'> CalibratedClassifierCV
<class 'sklearn.naive_bayes.ComplementNB'> ComplementNB
<class 'sklearn.tree.tree.DecisionTreeClassifier'> DecisionTreeClassifier
<class 'sklearn.tree.tree.ExtraTreeClassifier'> ExtraTreeClassifier
<class 'sklearn.ensemble.forest.ExtraTreesClassifier'> ExtraTreesClassifier
<class 'sklearn.naive_bayes.GaussianNB'> GaussianNB
<class 'sklearn.gaussian_process.gpc.GaussianProcessClassifier'> GaussianProcess
Classifier
<class 'sklearn.ensemble.gradient_boosting.GradientBoostingClassifier'> GradientBoosti
ngClassifier
<class 'sklearn.neighbors.classification.KNeighborsClassifier'> KNeighborsClassifier
<class 'sklearn.semi_supervised.label_propagation.LabelPropagation'> LabelPropagation
<class 'sklearn.semi_supervised.label_propagation.LabelSpreading'> LabelSpreading
<class 'sklearn.discriminant_analysis.LinearDiscriminantAnalysis'> LinearDiscriminantA
nalysis
<class 'sklearn.linear_model.logistic.LogisticRegression'> LogisticRegression
<class 'sklearn.linear_model.logistic.LogisticRegressionCV'> LogisticRegressionCV
<class 'sklearn.neural_network.multilayer_perceptron.MLPClassifier'> MLPClassifier
<class 'sklearn.naive_bayes.MultinomialNB'> MultinomialNB
<class 'sklearn.svm.classes.NuSVC'> NuSVC
<class 'sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis'> QuadraticDiscrim
inantAnalysis
<class 'sklearn.ensemble.forest.RandomForestClassifier'> RandomForestClassifier
<class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> SGDClassifier
<class 'sklearn.svm.classes.SVC'> SVC

所以你最终得到 31 个 class 中的 24 个作为 AdaBoostClassifierbase_estimator 的潜在选项。

错误 return 因使用不正确的 classifier 作为 base_estimator 在这方面也很有帮助。

TypeError: AdaBoostClassifier with algorithm='SAMME.R' requires that the weak learner supports the calculation of class probabilities with a predict_proba method. Please change the base estimator or set algorithm='SAMME' instead.

如您所见,该错误特别指出您使用 predict_proba 方法 classes。