Можно ли установить base_estimator как OneVsRestClassifier(DecisionTreeClassifier()) для Adaboost?

Я пытаюсь построить модель Adaboost на наборе данных с мультиклассовыми метками для возрастной группы и этнической группы.

Поскольку я планирую получить ROC и AUC, я бинаризовал целевые переменные как yb_train2 для возрастной группы и yb_train3 для этнической группы. Затем я попробовал один против остальных в модели дерева решений, которая отлично работает.

но теперь я понятия не имею, как указать параметры в поиске по сетке, я попробовал следующий код и получил синтаксическую ошибку:

abc = AdaBoostClassifier(base_estimator= (OneVsRestClassifier(DecisionTreeClassifier()))


param_grid = dict(base_estimator__estimator__criterion = ["gini", "entropy"],
                  base_estimator__estimator__splitter = ["best", "random"],
                  n_estimators = [1, 2],
                  learning_rate =  [0.0001,0.001,0.01,0.1,1]
                  )

grid = GridSearchCV(abc,param_grid)

grid.fit(X_train,yb_train2)
print ('best score: {:}').format(grid.best_score_ ), ('with parameter: {:}').format(grid.best_params_)

grid.fit(X_train,yb_train3)
print ('best score: {:}').format(grid.best_score_ ), ('with parameter:{:}').format(grid.best_params_)

Можно ли установить base_estimator как OneVsRestClassifier(DecisionTreeClassifier()) для Adaboost? Может кто-нибудь дать какие-то предложения в такой ситуации? Спасибо:)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
434
1

Ответы 1

Вы пропустили закрытие одной из скобок.

from sklearn.ensemble import AdaBoostClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

abc = AdaBoostClassifier(base_estimator= (OneVsRestClassifier(DecisionTreeClassifier())))

param_grid = dict(base_estimator__estimator__criterion = ["gini", "entropy"],
                  base_estimator__estimator__splitter = ["best", "random"],
                  n_estimators = [1, 2],
                  learning_rate =  [0.0001,0.001,0.01,0.1,1]
                  )

grid = GridSearchCV(abc,param_grid)      

Это может помочь вам преодолеть синтаксическую ошибку.

Но DecisionTreeClassifier по умолчанию является многоклассовым классификатором, поэтому я бы посоветовал не использовать поверх него оболочку oneVsRestclassifier.

Спасибо бро, исправил. но по-прежнему не может вводить двоичные многоклассовые данные. он вернет «ValueError: неправильная форма ввода (72, 5)» после того, как я подгоню сетку к своим данным, которые имеют 5 классов. Должен ли я использовать OneRestClassifer(Adaboost()) вместо того, чтобы выносить Adaboost() за скобки? но как я могу указать параметры для каждого? МОЙ БОГ!! это ооочень сложно.. но все равно спасибо за помощь с исправлением.

Darsolation 09.03.2019 11:23

Я хочу сказать, что вам не нужно бинаризировать мультиклассовые данные. Вы можете напрямую передать это в solutionTreeClassifier или Adaboost.

Venkatachalam 09.03.2019 11:56

Потому что я использую ROC в качестве показателей классификации для всех своих моделей, так как ROC необходимо бинаризировать данные, поэтому я пытаюсь выяснить эту проблему.

Darsolation 09.03.2019 23:28

Другие вопросы по теме