Добрый день, уважаемые читатели! Мы продолжаем экспериментировать с объединением моделей sklearn ради большей обобщающей способности. Сегодня мы реализуем ансамбль с мажоритарным голосованием, используя 4 модели и набор данных wine.
Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на моем YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!
Что такое мажоритарное голосование?
С мажоритарным голосованием мы часто встречаемся: это как выборы — выбирается ответ большинства. Так и у нас, например, если 3 модели предсказывают метку класса 0, а одна — 1, то наш ансамбль выдаст предсказание 0. Мы облегчим задачу, т. к. только начинаем объединять модели ml: у нас не будет весовой системы, т. е. «ответ» обычной логистической регрессии имеет одинаковый вес с «ответом» нейронной сети.
Реализуем ансамбль с мажоритарным голосованием
Ознакомьтесь со списком необходимого:

Здесь нет ничего необычного, всё это мы использовали по отдельности, так что всё соединить!
Мы воспользуемся ООП, весь интерфейс будем помещать в классе:

В конструктор класса мы ничего не передаём, а при инициализации создаём поле с пустым списком, в котором мы будем хранить модели, которые будут нам поступать:

Мы будем использовать программный интерфейс sklearn, который является общепринятым для моделей машинного обучения. То есть для адаптации модели нам необходимо вызвать метод fit, для предсказания метод predict, а для вычисления обобщающей способности — метод score:

Если в класс не передали никаких моделей, мы возбуждаем исключение, в противном случае — обучаем все модели из списка.

Примечание. Обычно метод predict принимает двумерный массив N*M, а возвращает одномерный массив длиной N. У нас метод predict принимает одномерный массив, а возвращает скалярное значение.
С помощью словаря мы подсчитываем все предсказания и их количество, а затем с помощью манипуляций со стандартными структурами Python возвращаем результат.

Метод score возвращает привычное ему значение — кол-во правильных предсказаний, делённое на общее количество образцов.
Я решил добавить метод, возвращают правильность моделей по отдельности:

Тестирование

Загружаем датасет из функции, и распределяем его на тестовые/тренировочные данные в отношении 3/7.

Создаём экземпляр нашего класса, загружаем туда 4 предварительно созданных модели, и обучаем его.
Результат неожиданный:

Примечание. Очень часто точность нашего ансамбля оказывалась хуже, чем точность отдельной модели из-за того, что у нас две модели работают на случайности (случайный лес и веса нейросети). Однако скриншот выше показывает, что мы таки можем улучшить обобщающую способность таким способом.
Весь код из статьи ансамбль с мажоритарным голосованием вы можете найти в этом документе, который можно загрузить и изменить на своё усмотрение.
Также рекомендую прочитать статью Функциональный API библиотеки Keras. Подпишитесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для разработчиков.