AdaBoostClassifier 和“SAMME.R”算法
AdaBoostClassifier and the 'SAMME.R’ Algorithm
进入实际问题需要一段时间,所以请耐心等待。 The AdaBoost documentation 声明它“是一个元估计器,它首先在原始数据集上拟合一个 classifier,然后在同一数据集上拟合 classifier 的额外副本,但其中权重错误 class 化的实例进行了调整”。为此,必需的参数之一是 base_estimator
。 base_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 个作为 AdaBoostClassifier
中 base_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。
进入实际问题需要一段时间,所以请耐心等待。 The AdaBoost documentation 声明它“是一个元估计器,它首先在原始数据集上拟合一个 classifier,然后在同一数据集上拟合 classifier 的额外副本,但其中权重错误 class 化的实例进行了调整”。为此,必需的参数之一是 base_estimator
。 base_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 个作为 AdaBoostClassifier
中 base_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。