Scikit learn AdaBoostClassifier和';SAMME.R’;算法

Scikit learn AdaBoostClassifier和';SAMME.R’;算法,scikit-learn,ensemble-learning,adaboost,Scikit Learn,Ensemble Learning,Adaboost,真正的问题需要一段时间,所以请耐心听我说。声明它“是一种元估计器,首先在原始数据集上拟合分类器,然后在同一数据集上拟合分类器的其他副本,但调整了未正确分类实例的权重”。为此,所需参数之一是base\u估计器。对于可与adaboostclassifier一起使用的base\u估计器,“需要支持样本加权” 所以我的第一个问题是-哪些分类器提供了对样本权重的支持?我做了一些研究,幸运的是。经过一定程度的更新,它是这样工作的:通过运行 from sklearn.utils.testing import

真正的问题需要一段时间,所以请耐心听我说。声明它“是一种元估计器,首先在原始数据集上拟合分类器,然后在同一数据集上拟合分类器的其他副本,但调整了未正确分类实例的权重”。为此,所需参数之一是
base\u估计器
。对于可与
adaboostclassifier
一起使用的
base\u估计器
,“需要支持样本加权”

所以我的第一个问题是-哪些分类器提供了对样本权重的支持?我做了一些研究,幸运的是。经过一定程度的更新,它是这样工作的:通过运行

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个)

到目前为止还不错。但是现在我们必须处理另一个
adaboostclassifier
参数,即
算法
。您有两个选项:
{'SAMME',SAMME.R'},可选(默认值为'SAMME.R')
。我们被告知,“使用SAMME.R实数boosting算法
base\u估计器
必须支持类概率的计算”。这就是我被卡住的地方。在线搜索时,我只能找到两个与'SAMME.R'一起用作
算法
参数的分类器:
DecisionTreeClassifier
(默认值)和
RandomForestClassifier

因此,这里有一个问题-21中的哪些其他分类器与
adaboostclassifier
兼容,为类概率的计算提供支持


谢谢。

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

这是许多分类器用来返回给定观察值的每个类的概率的方法。了解了这一点,您只需检查具有
predict\u 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
对于名称,所有_估计器中的clf(type_filter='classifier'):
如果hasattr(clf,“预测概率”):
打印(clf,名称)
Adaboost分类器
装袋分级机
伯努林
校准分类RCV
补体
决策树分类程序
树外分类器
树外分类器
高斯型
高斯过程
分级机
梯度boosti
NGO分类器
Kneighbors分级机
唇形繁殖
贴标
线纹夜蛾
分析
逻辑回归
逻辑回归
MLP分类器
多项式nb
NuSVC
方形圆盘
非稳态分析
随机分类器
SGD分类器
SVC
因此,31个分类器中有24个是
AdaBoostClassifier
base\u估计器的潜在选项

在这方面,使用不正确的分类器作为
base\u估计器所返回的错误也是非常有用的

TypeError:AdaBoostClassifier与算法='SAMME.R'要求弱学习者 支持使用预测概率方法计算类别概率。 请更改基本估计器或将算法设置为“SAMME”


正如您所看到的,错误明确地将您指向使用
预测概率
方法的类。

我非常确定,当文档提到“必须支持类概率的计算”时,它们意味着存在一种
预测概率
方法

这是许多分类器用来返回给定观察值的每个类的概率的方法。了解了这一点,您只需检查具有
predict\u 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
对于名称,所有_估计器中的clf(type_filter='classifier'):
如果hasattr(clf,“预测概率”):
打印(clf,名称)
Adaboost分类器
装袋分级机
伯努林
校准分类RCV
补体
决策树分类程序
树外分类器
树外分类器
高斯型
高斯过程
分级机
梯度boosti
NGO分类器
Kneighbors分级机
唇形繁殖
贴标
线纹夜蛾
分析
逻辑回归
逻辑回归
MLP分类器
多项式nb
NuSVC
方形圆盘
非稳态分析
随机分类器
SGD分类器
SVC
因此,31个分类器中有24个是
AdaBoostClassifier
base\u估计器的潜在选项

在这方面,使用不正确的分类器作为
base\u估计器所返回的错误也是非常有用的

TypeError:AdaBoostClassifier与算法='SAMME.R'要求弱学习者 支持使用预测概率方法计算类别概率。 请更改基本估计器或将算法设置为“SAMME”


正如您所看到的,这个错误明确地将您指向使用
predict\u proba
方法的类。

回答得很好,并且捕捉到了这个错误!只有一条评论——你说:“31个分类器中有24个是
AdaBoostClassifier
base_估计器的潜在选项”——这24个分类器支持类概率;但ABC也需要样本权重的支持。因此,在31个分类器中,支持这两个要求的数量是(鼓轮!)-17!有没有关于如何为一个本机不被接受的分类器实现这些方法以使其工作的文档?回答得很好,并且很好地捕捉到了错误!只有一条评论——你说:“31个分类器中有24个是
AdaBoostClassifier
base_估计器的潜在选项”——这24个分类器支持类概率;但ABC也需要样本权重的支持。因此,在31个分类器中,支持这两个要求的数量是(鼓轮!)