Роль разнообразия в улучшении выступления ансамбля

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

Как выбрать лучших участников ансамбля, чтобы объединить их в единую, более мощную модель? В этой статье мы рассмотрим, как выбирать модели для ансамбля и как их объединять.

Что такое разнообразие?

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

Как мы можем увеличить разнообразие?

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

Обучение каждой модели на разных подмножествах обучающих данных. Когда образцы тонут при замене, это называется упаковкой. Когда выборка выполняется без замены, это называется вставкой. Это также может помочь уменьшить дисперсию прогнозов ансамбля, что может улучшить его обобщение. Идея разнообразия в бэггинге получила дальнейшее развитие в Случайный лес и Чрезвычайно рандомизированные деревья. В первом случае достигается разнообразие за счет выбора случайного числа признаков, доступных для деревьев при каждом разделении, а во втором используется случайное разделение, чтобы снизить корреляцию между деревьями в ансамбль.

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

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

Однако разнообразные прогнозы не всегда лучше.

Хорошее и плохое разнообразие

В мажоритарном ансамбле можно использовать понятие потерянных голосов, чтобы понять разнообразие ансамбля. Если ансамбль уже правильный, низкое расхождение между классификаторами указывает на то, что несколько голосов были потрачены впустую, поскольку одно и то же правильное решение было бы принято независимо от голосов отдельных классификаторов. Это известно как хорошее разнообразие, поскольку оно измеряет несогласие там, где ансамбль уже правильный. Больше разногласий в этой ситуации означает меньшее количество потерянных голосов. Напротив, плохое разнообразие измеряет несоответствие, когда совокупность неверна. В этом случае любое разногласие представляет собой потраченное впустую голосование, поскольку отдельный классификатор не способствовал правильному решению, принятому ансамблем. Чтобы максимизировать эффективность ансамбля, важно увеличить хорошее разнообразие и уменьшить плохое разнообразие, что может быть достигнуто за счет уменьшения количества потерянных голосов.
Другой способ думать об этом — с точки зрения точности. Например, предположим, что модель дерева решений, как правило, очень хорошо идентифицирует собак, но имеет проблемы с кошками. Модель логистической регрессии, с другой стороны, лучше идентифицирует кошек, но имеет проблемы с собаками. Каждый из этих алгоритмов имеет свои сильные и слабые стороны и допускает различные типы ошибок в данных. Объединив прогнозы этих двух моделей, мы можем создать ансамбль, который в целом будет более точным, чем любая отдельная модель. Это пример хорошего разнообразия. Мы могли бы добавить третью модель, плохо классифицирующую как кошек, так и собак. Третья модель увеличила бы разнообразие ансамбля, не принеся никакой пользы. Это считается плохим разнообразием. [2]

Как мы можем измерить разнообразие?

Назовем f₁, f₂, … fₙпрогнозы различных моделей в ансамбле.
Существует два типа показателей разнообразия: парные и глобальные. Попарные показатели необходимо вычислять для каждой пары fᵢ, fⱼ. В итоге вы получите nxn матрица. Глобальные вычисляются по всей матрице прогнозов и представляются одним значением. Следующий список ни в коем случае не является исчерпывающим, вы можете найти больше показателей в статье Кунчевой, в литературе.
В формулах 0 означает, что прогноз неверен, а 1 — что он верен. Например, N⁰¹ означает количество раз, когда первый классификатор верен, а второй нет.

Коэффициент корреляции Пирсона
Самый простой способ вычислить сходство в ансамбле — использовать коэффициент корреляции Пирсона. Если прогнозы двух моделей очень коррелированы, это означает, что они очень похожи. Максимальное разнообразие достигается, когда ρᵢⱼ = 0, в то время как два классификатора, дающие одинаковые результаты, будут иметь ρᵢⱼ = 1. Можно вычислить коэффициент корреляции, когда прогнозы вероятностей, как в ансамблях мягкого голосования.
Следующие метрики используются в прогнозах бинарного класса.

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

Q Юла
Q Юла имеет значения от -1 до 1. Этот показатель добавляет важную информацию: положительные значения указывают на то, что модели правильно классифицируют одни и те же объекты, в то время как те, кто ошибается по разным объектам, будут иметь отрицательные значения Q. Значение 0 предполагает, что прогнозы независимы.

Энтропия
Следующая мера является глобальной. Он вычисляется по всей матрице прогнозов. Энтропия основана на идее, что когда разногласия максимальны, половина предсказаний равна нулю, а другая половина — единице. В следующей формуле L — это общее количество членов ансамбля, а l — это общее количество классификаторов, которые правильно классифицируют экземпляр zⱼ.

Реализация Python

def coefficients(preds):
    A = np.asarray(preds[:, 0], dtype=bool)
    B = np.asarray(preds[:, 1], dtype=bool)

    a = np.sum(A * B)           # A right, B right
    b = np.sum(~A * B)          # A wrong, B right
    c = np.sum(A * ~B)          # A right, B wrong
    d = np.sum(~A * ~B)         # A wrong, B wrong

    return a, b, c, d

def disagreement(preds, i,j):
    L = preds.shape[1]
    a, b, c, d = coefficients(preds[:, [i, j]])
    return float(b + c) / (a + b + c + d)

def paired_q(preds, i, j):
    L = preds.shape[1]
    # div = np.zeros((L * (L - 1)) // 2)
    a, b, c, d = coefficients(preds[:, [i, j]])
    return float(a * d - b * c) / ((a * d + b * c) + 10e-24) 

def entropy(preds):
    L = preds.shape[1]
    tmp = np.sum(preds, axis=1)
    tmp = np.minimum(tmp, L - tmp)
    ent = np.mean((1.0 / (L - np.ceil(0.5 * L))) * tmp)
    return ent

Построение классификатора голосования

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

Я выбираю 9 моделей для первого ансамбля и 10 моделей для второго. Каждая модель обучается с параметрами по умолчанию. Набор данных доступен в репозитории UCI.

Сравнение моделей
Чтобы иметь базовый уровень для сравнения ансамбля, на следующем рисунке показаны 10 наиболее эффективных моделей. Мы сосредоточимся на счете F1.

from pmlb import fetch_data
from pycaML import ClassificationExperiment
name = 'diabetes'
df = fetch_data(name, return_X_y=False)
df.head()
df.to_csv(f'{name}.csv', index=False)
from pycaML import ClassificationExperiment
exp = ClassificationExperiment(name = name)
exp.load_data(f'{name}.csv', target='target')
exp.start()
exp.result.loc[:, exp.result.columns.str.contains('Test')].head(10)

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

preds = pd.DataFrame()
for preds in exp.result.index:
    preds[preds] = exp.predict(preds)

preds.shape

# (154, 19)

ensemble_1 = preds.iloc[:, 1::2]
ensemble_2 = preds.iloc[:, ::2]

def disagreement_matrix(preds):
    res = np.zeros((preds.shape[1], preds.shape[1]))
    for i in range(preds.shape[1]):
        for j in range(i, preds.shape[1]):
            res[i, j] = disagreement(preds, i, j)
            res[j, i] = res[i, j]
    return res

sns.heatmap(d, annot=True, cmap='coolwarm', vmin=0, vmax=1, cbar = False)

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

Ансамбль 2 содержит разные модели. В целом, кажется, что разногласий довольно мало. Член с наибольшим несогласием — пассивно-агрессивный классификатор.

Поскольку Ансамбль 1 имеет более высокую энтропию, это означает, что разнообразие выше.

Давайте теперь построим окончательную модель, приняв большинство голосов (режим). Эта метамодель называется жестким голосованием. Два ансамбля оцениваются с использованием той же метрики, что и раньше, балла F1.

preds_voting = preds.mode(axis=1)[0]
print(f'F1 score for {model}: {f1_score(preds_voting, y_test, average="macro"):.3f})

Наконец, мы показываем, что более высокое разнообразие (ансамбль 1) приводит к лучшей модели ансамбля. Лучшей моделью, найденной в сравнении, является Extra Trees с оценкой F1 0,71. Окончательная модель работает лучше, чем лучшая модель, обученная на наборе данных, со значительным отрывом, достигая 0,764 балла.

Выводы

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

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

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

Рекомендации

[1] Жерон, А. (2019). Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow: концепции, инструменты и методы создания интеллектуальных систем (2-е изд.). О’Райли.

[2] Кунчева Л.И., Уитакер С.Дж. Меры разнообразия в ансамблях классификаторов и их связь с точностью ансамбля. Машинное обучение 51, 181–207 (2003 г.). https://doi.org/10.1023/A:1022859003006