Что такое жесткое и мягкое голосование в машинном обучении?

Введение

Жесткое голосование и мягкое голосование — это два разных способа объединения прогнозов нескольких классификаторов в ансамблевых алгоритмах машинного обучения.

Жесткое голосование — самый простой способ. Каждый классификатор делает прогноз, а прогноз ансамбля — это просто большинство голосов. Например, если три классификатора предсказывают, что на изображении изображена кошка, а один классификатор предсказывает, что это изображение оленя, прогноз ансамбля будет заключаться в том, что на изображении изображена кошка.

Мягкое голосование учитывает достоверность прогноза каждого классификатора. Каждый классификатор присваивает вероятность каждому классу, а прогноз ансамбля — это класс с наибольшей общей вероятностью. Например, если один классификатор предсказывает, что изображение кошки с вероятностью 0,9, а другой классификатор предсказывает, что это это олень с вероятностью 0,1, ансамбль прогнозирует, что это изображение кошки.

Фиксированное голосование проще реализовать, но оно может быть менее точным, чем мягкое голосование. Это связано с тем, что жесткое голосование игнорирует достоверность прогноза каждого классификатора. Мягкое голосование является более точным, но и более сложным в реализации. Наилучший подход к использованию будет зависеть от конкретного приложения. Если точность является наиболее важным фактором, то лучшим выбором будет мягкое голосование. Однако, если важнее простота, лучше выбрать жесткое голосование.

Жесткое голосование

Как работает жесткое голосование?

Жесткое голосование — это простой алгоритм, который можно использовать для объединения прогнозов нескольких классификаторов. Алгоритм работает, сначала каждый классификатор делает прогноз. Тогда прогноз ансамбля — это просто большинство голосов отдельных классификаторов.

Например, допустим, у нас есть три классификатора, каждый из которых обучен классифицировать изображения кошек (0) и оленей (1). Первый классификатор предсказывает, что изображение кошки, второй классификатор предсказывает, что это изображение оленя, а третий классификатор — кошка. Прогноз ансамбля будет заключаться в том, что на изображении кошка, потому что два из трехклассификаторов сделали этот прогноз. Изображение, изображенное ниже, показывает то же самое.

Преимущества жесткого голосования

Жесткое голосование имеет несколько преимуществ по сравнению с другими алгоритмами обучения ансамбля. Во-первых, это очень просто реализовать. Во-вторых, это очень эффективно. В-третьих, его можно использовать с любым типом классификатора.

Простота жесткого голосования делает его популярным среди специалистов по машинному обучению. Жесткое голосование также очень эффективно и часто может превзойти другие алгоритмы обучения ансамбля. Наконец, жесткое голосование можно использовать с классификатором любого типа, что делает его универсальным инструментом.

Недостатки жесткого голосования

Жесткое голосование также имеет некоторые недостатки. Во-первых, оно может быть менее точным, чем мягкое голосование, которое учитывает достоверность прогноза каждого классификатора. Во-вторых, жесткое голосование может быть менее устойчивым к шуму в данных.

Точность жесткого голосования может быть ограничена тем фактом, что оно игнорирует достоверность прогноза каждого классификатора. Это означает, что жесткое голосование с большей вероятностью может привести к ошибкам, когда отдельные классификаторы не очень уверены в своих прогнозах.

Жесткое голосование также может быть менее устойчивым к шуму в данных. Это связано с тем, что жесткое голосование основано на большинстве голосов отдельных классификаторов. Если данные зашумлены, более вероятно, что большинство голосов будет неверным.

Код Python — жесткое голосование

Пример кода сначала создает список классификаторов. Затем он создает классификатор голосования и обучает его на обучающих данных. Наконец, он делает прогнозы на основе тестовых данных и оценивает точность.

Класс VotingClassifier в scikit-learn можно использовать для объединения прогнозов нескольких классификаторов. Для параметра voting можно установить значение 'hard', чтобы использовать жесткое голосование.

import numpy as np
from sklearn.ensemble import VotingClassifier

# Create a list of classifiers.
classifiers = [
    KNeighborsClassifier(n_neighbors=5),
    RandomForestClassifier(n_estimators=100),
    DecisionTreeClassifier()
]

# Create a voting classifier.
voting_clf = VotingClassifier(estimators=classifiers, voting='hard')

# Train the voting classifier.
voting_clf.fit(X_train, y_train)

# Make predictions.
y_pred = voting_clf.predict(X_test)

# Evaluate the accuracy.
print(accuracy_score(y_test, y_pred))

Мягкое голосование

Как работает мягкое голосование?

Мягкое голосование — это алгоритм, который можно использовать для объединения прогнозов нескольких классификаторов с использованием вероятности прогнозов. Алгоритм работает, сначала каждый классификатор назначает вероятность каждому классу. Прогноз ансамбля — это просто класс с наибольшей общей вероятностью.

Например, допустим, у нас есть три классификатора, каждый из которых обучен классифицировать изображения кошек (1) и оленей (0). Первый классификатор предсказывает, что изображение кошки с вероятностью 0,7 и оленя с вероятностью 0,3, второй классификатор предсказывает, что изображение кошки с вероятностью 0,4 и оленя с вероятностью 0,6, и третий классификатор предсказывает, что на изображении изображена кошка с вероятностью 0,9 и олень с вероятностью 0,1. Прогноз ансамбля будет заключаться в том, что на изображении кошка, потому что общая вероятность класса кошек составляет (0,7 + 0,4 + 0,9) / 3 = 0,666, а вероятность класса оленей (0,3 + 0,6 + 0,1) / 3 = 0,333. Изображение, изображенное ниже, показывает то же самое.

Мягкое голосование — это простой алгоритм, но он может быть очень эффективным. Это связано с тем, что он использует тот факт, что несколько классификаторов часто могут делать более точные прогнозы, чем один классификатор.

Преимущества мягкого голосования

Мягкое голосование имеет ряд преимуществ перед жестким голосованием. Во-первых, это более точно, чем жесткое голосование. Во-вторых, он более устойчив к шуму в данных. В-третьих, его можно использовать с любым типом классификатора.

Точность мягкого голосования обусловлена ​​тем, что оно учитывает достоверность прогноза каждого классификатора. Это означает, что при мягком голосовании меньше вероятность ошибок, когда отдельные классификаторы не очень уверены в своих прогнозах.

Мягкое голосование также более устойчиво к шуму в данных. Это связано с тем, что мягкое голосование основано на общей вероятности каждого класса. Если данные зашумлены, более вероятно, что общая вероятность правильного класса будет выше, чем общая вероятность неправильных классов.

Наконец, мягкое голосование можно использовать с классификатором любого типа. Это связано с тем, что мягкое голосование не требует одинакового обучения классификаторов.

Недостатки мягкого голосования

Мягкое голосование также имеет некоторые недостатки. Во-первых, его сложнее реализовать, чем жесткое голосование. Во-вторых, это может быть менее эффективно, чем жесткое голосование. Сложность мягкого голосования связана с тем, что оно требует, чтобы каждый классификатор назначал вероятность каждому классу. Это может занять много времени, особенно при большом количестве занятий.

Код Python — мягкое голосование

Пример кода, показанный ниже, создает список классификаторов. Затем он создает классификатор голосования и обучает его на обучающих данных. Наконец, он делает прогнозы на основе тестовых данных и оценивает точность.

Класс VotingClassifier в scikit-learn можно использовать для объединения прогнозов нескольких классификаторов. Для параметра voting можно установить значение 'soft', чтобы использовать мягкое голосование. При мягком голосовании прогнозы каждого классификатора взвешиваются по их показателям достоверности. Затем в качестве предсказания ансамбля выбирается класс с наибольшей взвешенной суммой.

import numpy as np
from sklearn.ensemble import VotingClassifier

# Create a list of classifiers.
classifiers = [
    KNeighborsClassifier(n_neighbors=5),
    RandomForestClassifier(n_estimators=100),
    DecisionTreeClassifier()
]

# Create a voting classifier.
voting_clf = VotingClassifier(estimators=classifiers, voting='soft')

# Train the voting classifier.
voting_clf.fit(X_train, y_train)

# Make predictions.
y_pred = voting_clf.predict_proba(X_test)

# Evaluate the accuracy.
print(accuracy_score(y_test, y_pred.argmax(axis=1)))

Заключение

Жесткое голосование проще реализовать, но оно может быть менее точным, чем мягкое голосование. Это связано с тем, что жесткое голосование игнорирует достоверность прогноза каждого классификатора. Мягкое голосование является более точным, но и более сложным в реализации.

Наилучший подход к использованию будет зависеть от конкретного приложения. Если точность является наиболее важным фактором, то лучшим выбором будет мягкое голосование. Однако, если простота более важна, тогда жестким голосованием может быть лучший вариант.

Жесткое голосование:

  • Простота реализации
  • Менее точное, чем мягкое голосование
  • Лучше для приложений, где простота важнее

Мягкое голосование:

  • Более сложный в реализации
  • Более точно, чем жесткое голосование
  • Лучше для приложений, где точность важнее

Вот несколько примеров, когда можно использовать жесткое и мягкое голосование:

Жесткое голосование:

  • Спам-фильтр, использующий несколько классификаторов для идентификации спам-писем.
  • Система обнаружения мошенничества, использующая несколько классификаторов для выявления мошеннических транзакций.
  • Система медицинской диагностики, использующая несколько классификаторов для выявления заболеваний.

Мягкое голосование:

  • Система прогнозирования фондового рынка, которая использует несколько классификаторов для прогнозирования цен на акции.
  • Система прогнозирования погоды, которая использует несколько классификаторов для предсказания погоды.
  • Система прогнозирования изменения климата, которая использует несколько классификаторов для прогнозирования последствий изменения климата.

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

Следите за новостями о машинном обучении Ильяс Ахмед.