gpt4 book ai didi

scikit-learn - AdaBoostClassifier 和 'SAMME.R’ 算法

转载 作者:行者123 更新时间:2023-12-02 03:20:38 26 4
gpt4 key购买 nike

进入实际问题需要一段时间,所以请耐心等待。 The AdaBoost documentation指出它“是一个元估计器,首先在原始数据集上拟合分类器,然后在同一数据集上拟合分类器的其他副本,但调整了错误分类实例的权重”。为此,必需的参数之一是 base_estimator。对于可与 AdaBoostClassifer 一起使用的 base_estimator,“需要支持样本加权”。

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

from sklearn.utils.testing import all_estimators 

print(all_estimators(type_filter='classifier'))

您会得到所有分类器的列表(原来有 31 个!)。然后,如果你运行

import inspect

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

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

到目前为止一切顺利。但现在我们必须处理另一个 AdaBoostClassifer 参数,即 algorithm。您有两个选项:{‘SAMME’, ‘SAMME.R’},可选 (default=’SAMME.R’)。我们被告知“使用 SAMME.R 真实增强算法 base_estimator 必须支持类概率的计算”。这就是我被困的地方。在线搜索,我只能找到两个与“SAMME.R”一起用作 algorithm 参数的分类器:DecisionTreeClassifier(默认)和 RandomForestClassifier.

那么问题来了 - 21 个与 AdaBoostClassifer 兼容的分类器中还有哪些分类器支持类别概率的计算?

谢谢。

最佳答案

我很确定当文档提到“必须支持类概率的计算”时,它们意味着有一个 predict_proba 方法。

这是许多分类器用来返回给定观察的每个类的概率的方法。有了这种理解,您只需要检查具有 predict_proba 方法的分类器:

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 个分类器中的 24 个作为 AdaBoostClassifierbase_estimator 的潜在选项。

使用不正确的分类器作为 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 方法的类。

关于scikit-learn - AdaBoostClassifier 和 'SAMME.R’ 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com