Добрый день, уважаемые читатели! Мы продолжаем экспериментировать с объединением моделей sklearn ради большей обобщающей способности. Сегодня мы реализуем ансамбль с мажоритарным голосованием, используя 4 модели и набор данных wine.

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.

А на моем YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Что такое мажоритарное голосование?

С мажоритарным голосованием мы часто встречаемся: это как выборы — выбирается ответ большинства. Так и у нас, например, если 3 модели предсказывают метку класса 0, а одна — 1, то наш ансамбль выдаст предсказание 0. Мы облегчим задачу, т. к. только начинаем объединять модели ml: у нас не будет весовой системы, т. е. «ответ» обычной логистической регрессии имеет одинаковый вес с «ответом» нейронной сети.

Реализуем ансамбль с мажоритарным голосованием

Ознакомьтесь со списком необходимого:

Здесь нет ничего необычного, всё это мы использовали по отдельности, так что всё соединить!

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

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

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

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

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

С помощью словаря мы подсчитываем все предсказания и их количество, а затем с помощью манипуляций со стандартными структурами Python возвращаем результат.

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

Я решил добавить метод, возвращают правильность моделей по отдельности:

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

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

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

Результат неожиданный:

Примечание. Очень часто точность нашего ансамбля оказывалась хуже, чем точность отдельной модели из-за того, что у нас две модели работают на случайности (случайный лес и веса нейросети). Однако скриншот выше показывает, что мы таки можем улучшить обобщающую способность таким способом.

Весь код из статьи ансамбль с мажоритарным голосованием вы можете найти в этом документе, который можно загрузить и изменить на своё усмотрение.

Также рекомендую прочитать статью Пошаговый классификатор на Python. Подпишитесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для разработчиков.