LogitBoost требует, чтобы базовый оценщик был регрессором - PullRequest
0 голосов
/ 06 января 2019

У меня есть набор данных, в котором все значения для каждого объекта являются числовыми, даже столбец класса / метки. В алгоритмах повышения, реализованных в python (таких как logitboost, adaboost, GradientBoosting), кроме предустановленных базовых оценок (или слабых учеников, модель, которая перебирает наши данные), мы можем указать алгоритм классификации, такой как SVC из SVM, как наивные байесы и т. Д. на. (некоторые алгоритмы / пакеты, такие как xgboost и catboost, которые реализованы в python, не могут принимать другие базовые оценки, кроме тех, которые реализованы в пакете ... может быть предпочтение реализации?)

В этом вступлении я представляю свою проблему. Этот код здесь не работает и выдает эту ошибку: LogitBoost requires the base estimator to be a regressor.

for j in range(1, 21):
for i in range(1, 11):
    X_train = pd.read_csv('{}-train{}-1.csv'.format(j, i))
    y_train = pd.read_csv('{}-train{}-2.csv'.format(j, i))
    X_test = pd.read_csv('{}-test{}-1.csv'.format(j, i))
    y_test = pd.read_csv('{}-test{}-2.csv'.format(j, i))
    model = logitboost.LogitBoost(base_estimator = svm.SVC())
    model.fit(X_train, y_train)
    y_predict = model.predict(X_test)
    accuracy = metrics.accuracy_score(y_test, y_predict)
    print('Accuracy for dataset {}, segment {} is: '.format(j, i), accuracy)
    print('Confusion Matrix for Datatset {}, segment {} is: '.format(j, i))
    print(metrics.confusion_matrix(y_test, y_predict))

Пожалуйста, не берите в голову отступ. Это показывает неправильно здесь, но это правильно на холостом ходу. Я прошу прощения за это.

Линия:

model = logitboost.LogitBoost(base_estimator = svm.SVC())

не работает с SVC, что должно, потому что logitboost является алгоритмом классификации. Но он работает с SVR (регрессия опорных векторов), а это не то, что я хочу. Кто-нибудь может объяснить, почему это происходит и как я могу решить это? Мне нужно использовать одни и те же базовые оценки для каждого алгоритма ради справедливости в сравнении ...

Спасибо.

1 Ответ

0 голосов
/ 10 января 2019

Вот как работает LogitBoost (и GBM). Каждый дополнительный слабый ученик подходит к остаточному , и поэтому должен быть регрессором. (Первоначальный прогноз в LogitBoost, по-видимому, составляет всего 0,5 для всех выборок. Я думаю, что другие реализации могут принять средний ответ вместо этого.)

Из документации :

base_estimator:object, optional
Базовая оценка, из которой Классификатор LogitBoost построен. Это должен быть регрессор . Если нет base_estimator указано, используется пень решения.

Adaboost отличается тем, что он изменяет веса неправильно классифицированных выборок, но каждый новый слабый учащийся по-прежнему соответствует исходным данным, как и классификаторы.

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