AdaBoostClassifier и алгоритм «SAMME.R» - PullRequest
0 голосов
/ 27 февраля 2019

Требуется некоторое время, чтобы перейти к актуальному вопросу, поэтому, пожалуйста, потерпите меня. В документации AdaBoost говорится, что он "является метаоценщиком, который начинается с подбора классификатора в исходном наборе данных, а затем помещается в дополнительные копии классификатора в том же наборе данных, но там, где корректируются веса неправильно классифицированных экземпляров.».Для этого одним из обязательных параметров является base_estimator.Для использования base_estimator с AdaBoostClassifer требуется «поддержка взвешивания выборки».

Итак, моя первая проблема была - какие классификаторы обеспечивают поддержку взвешивания выборки?Я провел некоторое исследование, и, к счастью, кто-то умнее меня получил ответ .Несколько обновленный, он работает следующим образом: запустив

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’}, optional (default=’SAMME.R’).Нам сказали, что «для использования алгоритма реального повышения SAMME.R base_estimator необходимо поддерживать вычисление вероятностей классов».И вот тут я застрял.Выполняя поиск в Интернете, я могу найти только два классификатора, которые используются с 'SAMME.R' в качестве аргумента для algorithm: DecisionTreeClassifier (по умолчанию) и RandomForestClassifier.

Так что вот вопрос - какойдругие классификаторы из 21, которые совместимы с AdaBoostClassifer, предлагают поддержку для расчета вероятностей классов?

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2019

Я почти уверен, что когда документация ссылается на «должен поддерживать вычисление вероятностей классов», это означает, что существует метод 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

Таким образом, вы получите 24 из 31 классификатора в качестве возможных вариантов для base_estimator в AdaBoostClassifier.

Ошибка, возвращаемая при использовании неправильного классификатора как base_estimator, также весьма полезна в этом отношении.

TypeError: AdaBoostClassifier withgorithm = 'SAMME.R' требует, чтобы слабыйУчащийся поддерживает вычисление вероятностей класса с помощью методаgnestt_proba.Пожалуйста, измените базовый оценщик или установите алгоритм = 'SAMME' вместо этого.

Как вы видите, ошибка указывает на классы с помощью метода predict_proba.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...