Категории: PythonНейронные сети

Ансамбль с мажоритарным голосованием на Python

Добрый день, уважаемые читатели! Мы продолжаем экспериментировать с объединением моделей 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-канал. Там еще больше полезного и интересного для разработчиков.

shwan @shwanoff

Программист .NET

Disqus Comments Loading...

Свежие публикации

Принципы SOLID C#

Принципы SOLID C# представляют собой набор утверждений, которые описывают архитектуру программных продуктов. То есть, следуя им можно разработать стабильно работающее…

5 дней тому назад

Функциональный API библиотеки Keras

Добрый день, уважаемые читатели. Темой этой статьи является функциональный программный интерфейс библиотеки Keras, который мы будем использовать для построения непоследовательных…

1 неделя тому назад

Сеточный поиск лучшей архитектуры нейронной сети с помощью Keras и Sklearn

Добрый день, уважаемые читатели. Темой нашей сегодняшней статьи станет объединение библиотек Keras и Sklearn. Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного…

3 недели тому назад

Использование конвейера в sklearn

Добрый день, уважаемые читатели. Темой сегодняшней статьи станет объединение множества трансформаторов и классификатора в конвейер с сеточным поиском лучшей комбинации…

1 месяц тому назад

Английский язык для программиста

Английский язык считается языком международного общения, но еще больше он распространён в IT сфере, где его знание является одним из…

3 месяца тому назад

Сверточная нейронная сеть для распознавания цифр

Добрый день, уважаемые читатели. Целью этой статьи является классификация изображений с помощью сверточных слоёв Keras. Всё это дело мы будем…

4 месяца тому назад