Я пытаюсь решить регрессионную задачу. Я обнаружил, что 3 модели прекрасно работают для разных подмножеств данных: LassoLARS, SVR и Gradient Tree Boosting. Я заметил, что когда я делаю прогнозы, используя все эти 3 модели, а затем составляю таблицу «истинного результата» и выходных данных моих 3 моделей, я вижу, что каждый раз, по крайней мере, одна из моделей действительно близка к истинному результату, хотя 2 другие может быть относительно далеко.
Когда я вычисляю минимально возможную ошибку (если я беру прогноз от «лучшего» предиктора для каждого тестового примера), я получаю ошибку, которая намного меньше, чем ошибка любой отдельной модели. Поэтому я подумал о том, чтобы попытаться объединить предсказания этих трех разных моделей в какой-то ансамбль. Вопрос в том, как это сделать правильно? Все мои 3 модели построены и настроены с использованием scikit-learn. Предоставляет ли он какой-то метод, который можно использовать для упаковки моделей в ансамбль? Проблема в том, что я не хочу просто усреднять прогнозы по всем трем моделям, я хочу сделать это с взвешиванием, где взвешивание должно определяться на основе свойств конкретного примера.
Даже если scikit-learn не предоставляет такую функциональность, было бы неплохо, если бы кто-то знал, как правильно решить эту задачу - вычислить вес каждой модели для каждого примера в данных. Я думаю, что это может быть сделано с помощью отдельного регрессора, построенного поверх всех этих 3 моделей, который попытается вывести оптимальные веса для каждой из 3 моделей, но я не уверен, что это лучший способ сделать это.
источник
model.named_steps['lin_regr'].coef_
) даст вам некоторое представление о том, насколько каждая модель в ансамбле вносит свой вклад в окончательное решение.X, y = make_regression(n_features=10, n_targets=1)
это даст ошибку измерения. Может кто-нибудь объяснить, пожалуйста, что делать?Хорошо, потратив некоторое время на поиск в Google, я узнал, как я могу выполнить взвешивание в python даже с помощью scikit-learn. Рассмотрим ниже:
Я тренирую набор своих регрессионных моделей (как уже упоминалось SVR, LassoLars и GradientBoostingRegressor). Затем я запускаю их все на тренировочных данных (те же данные, которые использовались для обучения каждого из этих 3-х регрессоров). Я получаю прогнозы для примеров с каждым из моих алгоритмов и сохраняю эти 3 результата в фрейм данных pandas со столбцами «предсказанныйSVR», «предсказанный ЛАССО» и «предсказанный ГБР». И я добавляю последний столбец в это поле данных, которое я называю «прогнозируемым», что является реальным значением прогнозирования.
Затем я просто тренирую линейную регрессию на этом новом фрейме данных:
Поэтому, когда я хочу сделать прогноз для нового примера, я просто запускаю каждый из 3 моих регрессоров по отдельности, а затем я делаю:
на выходах моих 3 регрессоров. И получить результат.
Проблема в том, что я нахожу оптимальные веса для регрессоров в среднем, веса будут одинаковыми для каждого примера, на котором я попытаюсь сделать прогноз.
Если у кого-то есть идеи о том, как сделать суммирование (взвешивание) с использованием функций текущего примера, было бы приятно услышать их.
источник
LinearRegression()
вместоLogisticRegression()
модели?Если ваши данные имеют очевидные подмножества, вы можете запустить алгоритм кластеризации, такой как k-means, а затем связать каждый классификатор с кластерами, с которыми он хорошо работает. Когда появится новая точка данных, определите, в каком кластере она находится, и запустите соответствующий классификатор.
Вы также можете использовать обратные расстояния от центроидов, чтобы получить набор весов для каждого классификатора и прогнозировать, используя линейную комбинацию всех классификаторов.
источник
Я выполняю определенный тип взвешивания, выполняя следующие действия после того, как все ваши модели полностью обучены и работают хорошо:
Вы можете дополнительно настроить свой ансамбль, приняв правильное значение процента в течение некоторого времени. После того, как вы набрали значительно больший, новый набор данных, вы можете построить порог с шагом 0,1, например, против процента правильного, если использовать этот порог для оценки, чтобы получить представление о том, какой порог даст вам, скажем, 95% правильного для класса 1 и так далее. Вы можете продолжать обновлять набор тестов и оценки f1 по мере поступления новых данных и отслеживать отклонения, перестраивая модели при падении порогов или точности.
источник