Уведомления

Группа в Telegram: @pythonsu

#1 Март 26, 2018 17:08:16

Belg
Зарегистрирован: 2018-03-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Усреднение.

Catboost, случайный лес и логическая модель обучались на одних и тех же данных. Хочу усреднить результаты их предсказаний. Как можно это реализовать?

Офлайн

#2 Март 27, 2018 04:04:13

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Усреднение.

Можно предположить, что используется scikit-learn.

В вашем случае можно использовать VotingClassifier с параметром voting='soft'.

При voting='soft' вероятности предсказаний каждого классификатора будут сложены, а результатом
классификации будет тот класс, который даст максимальную сумму. Это тоже самое, что и осреднение –
только без деления на число классификаторов.

Отсюда следует,
чтобы VotingClassfier работал с параметром voting=soft, нужно, чтобы передаваемые ему классификаторы (estimators),
имели метод predict_proba. Поскольку Catboost имеет api совместимый с scikit-learn (исходя из документации от яндекса) – у него есть такой метод, остальные – логистическая регрессия и случайный лес – тоже (если они взяты из sklearn) имеют метод predict_proba.

В общем, какой-то такой псевдокод должен привести к желаемому результату:

 avg_clf = VotingClassifier([('CB_classifier', CatBoostClassifier(...)),
                                          ('RF_classifier', RandomForestClassfier(...)),
                                          ('Logit', LogisticRegression(....))], voting='soft' )
avg_clf.fit('your train dataset') 
avg_clf.predict_proba('new data')   # or .predict('new data')



Отредактировано scidam (Март 27, 2018 04:23:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version