В области машинного обучения работа с несбалансированными наборами данных может представлять серьезную проблему. Несбалансированные данные возникают, когда распределение классов в наборе данных неравномерно, при этом один класс доминирует над другими. Это может привести к предвзятым моделям, которые плохо работают с классом меньшинства. В этой статье мы рассмотрим, как обращаться с несбалансированными данными, используя набор данных Road Accidents UK и пакет несбалансированного обучения Python.

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

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

Что такое несбалансированные данные?

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

Дорожно-транспортные происшествия в Великобритании

Набор данных о безопасности дорожного движения предоставляет подробную информацию о дорожно-транспортных происшествиях в Соединенном Королевстве, включая такие факторы, как дата, время, местоположение, тип дороги, погодные условия, типы транспортных средств и серьезность аварии. Это ценный ресурс для анализа и понимания причин и закономерностей дорожно-транспортных происшествий. Набор данных доступен по адресу [01]; в этой статье мы рассматриваем данные за 2021 год.

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

Поскольку 77% всех несчастных случаев легкие, а 1,4% со смертельным исходом, это несбалансированная категория, и любой ванильный классификатор будет иметь точность ровно 77%, поскольку он оценивает только легкое происшествие.

Обращение к несбалансированным данным с помощью несбалансированного обучения

imbalanced-learn[02] — это пакет Python, специально разработанный для решения проблем, связанных с несбалансированными данными. Он предоставляет различные методы повторной выборки данных, которые могут помочь сбалансировать распределение классов и повысить производительность модели. Давайте рассмотрим некоторые из этих техник.

  1. Недостаточная выборка: это включает в себя случайное удаление выборок из класса большинства, чтобы соответствовать количеству выборок в классе меньшинства. Этот метод может помочь создать более сбалансированный набор данных, но может привести к потере информации, если удаленные образцы содержат важные закономерности.
  2. Избыточная выборка: это включает в себя случайное дублирование выборок из класса меньшинства для увеличения его представления в наборе данных. Этот метод помогает предотвратить потерю информации, но может также привести к переоснащению, если не использовать его осторожно.
  3. Комбинация методов избыточной и недостаточной выборки

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

Настройка эксперимента

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

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

X_train, X_test, y_train, y_test = train_test_split(X_input, y_input, test_size=0.2, random_state=20)

scaler = StandardScaler()
scaler.fit(X_train)
X_transform = scaler.transform(X_train)

model = Sequential()
model.add(Dense(15, input_shape=(X_transform.shape[1],), activation='relu'))
model.add(Dense(3, activation='softmax'))

# Compile model
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.save_weights("weights.hf5")

Обратите внимание, что приведенная выше матрица путаницы была создана с помощью этого кода. Чтобы гарантировать сопоставимость, следующее будет повторяться десять раз. Мы будем рассматривать только точность как показатель производительности.

import numpy as np

model.load_weights("weights.hf5")
history = model.fit(X_transform, y_train, epochs=60, verbose = 0)

_, x2 = model.evaluate(scaler.transform(X_test), y_test, verbose = 0)
print('Accuracy on randomly selected test data:', x2)

y_test_pred = np.argmax(model.predict(scaler.transform(X_test), verbose = 0))

Далее рассматриваются скрипичные сюжеты. Скрипичные графики дают возможность сравнить различные распределения данных. На графике ниже мы видим распределение точности при 10-кратном обучении модели. Черный прямоугольник в середине является частью нижнего и верхнего квантилей данных точности. Белая точка — это середина. Внешняя форма графика создается с помощью оценки плотности ядра (KDE) точности модели. Хорошее введение можно найти в [03].

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

Кластерные центроиды с мини-пакетным K-средним

Cluster Centroids — это метод генерации, что означает, что он будет генерировать синтетические данные из заданных. Данные из большинства классов полностью удаляются центроидами K-Means, т.е. здесь применяется K-Means с K = 1473 кластерами. Следующий рисунок дает представление о том, что произошло.

На этом графике можно увидеть уменьшение размера до 2D, выполненное UMAP [09]. Хорошее введение дано в [10]. Поскольку размерность исходных данных равна 26, этот график может дать только представление о том, что происходит: большинство облаков точек покрыты центроидами, и только несколько выбросов остаются невидимыми в данных с повторной выборкой. Из идеи алгоритма видно, что данные идеально сбалансированы. Все классы имеют 1473 образца.

В этом разделе будут обсуждаться результаты следующего кода.

from sklearn.cluster import MiniBatchKMeans
from imblearn.under_sampling import ClusterCentroids

cc = ClusterCentroids(
    estimator=MiniBatchKMeans(n_init=10, random_state=0), random_state=42
)
X_res, y_res = cc.fit_resample(X_input, y_input)

X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=20)

scaler = StandardScaler()
scaler.fit(X_train)
X_transform = scaler.transform(X_train)

for _ in range(10):
    model.load_weights("weights.hf5")
    history = model.fit(X_transform, y_train, epochs=60, verbose = 0)

После обучения мы видим, что можем обучить хороший классификатор на сокращенном наборе данных. Как человеческая интуиция, что в классах существует порядок, т. Е. Легкий ‹ Серьезный ‹ Фатальный, мы наблюдаем, что у классификатора больше всего проблем с соседним классом в этом порядке. Точность Fatal выше 90%. Следовательно, у нас есть отличный классификатор для предсказания Fatal и все еще хороший классификатор для других классов. Однако рассмотрение обученной модели на всем наборе данных дает другое представление.

Применение обученной модели ко всему набору данных показывает, что в основном прогнозируется класс Fatal; мы видим явный уклон в сторону этого класса. Точность модели менее 10%; эту модель нельзя использовать для какой-либо аналитики.

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

Почти мисс Недостаточная выборка

Этот метод выбирает данные из большинства классов, но не генерирует синтетические данные. Он основан на работе [04] Чжана и Мани в 2003 году и использует метод k-ближайших соседей. Здесь рассматривается среднее расстояние выборки по мажоритарному классу с k ближайшими соседями миноритарного класса. Мы делаем выборку из большинства, рассматривая наименьшие средние расстояния.

Во-первых, ближайший сосед K = 3 обучается на данных класса Fatal. Это означает, что для новой выборки ближайший сосед дает три ближайших фатальных точки данных, а также их расстояния до фатальной точки данных. Следовательно, каждой, скажем, небольшой точке данных три фатальные точки данных даются ближайшим соседом. Усреднение по трем расстояниям каждой точки данных Slight дает нам точки данных Slight, которые являются ближайшими к данным Fatal. Но, поскольку UMAP является уменьшением размерности с сохранением расстояния, рисунок выше показывает, что рассмотрение евклидова расстояния не является хорошей идеей в этом наборе данных.

Еще одна версия Near Miss, версия 2, рассматривает точки данных, которые находятся далеко от класса меньшинства. В общем, это может быть хорошей идеей, так как ближайшие точки данных могут быть слишком близко к границе класса.

from imblearn.under_sampling import NearMiss

cc = NearMiss()
X_res, y_res = cc.fit_resample(X_input, y_input)

X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=20)

scaler = StandardScaler()
scaler.fit(X_train)
X_transform = scaler.transform(X_train)

for _ in range(10):
    model.load_weights("weights.hf5")
    history = model.fit(X_transform, y_train, epochs=60, verbose = 0)

В приведенном выше коде используется версия с наименьшим расстоянием, версия 1. Здесь также оба основных класса сокращаются до 1472 выборок. Точность снижается на сбалансированном наборе данных до 60%, но на полном наборе данных точность составляет 40%.

Принимая во внимание Версию 2, мы видим, что она превосходит Версию 1, особенно в запоминаемости.

Порог жесткости экземпляра

Это также метод, при котором не генерируются синтетические данные. Он основан на [05] Смита, Мартинеса и Жиро-Кэррье в 2014 году. Авторы изучили 64 набора данных в отношении выборок, которые трудно правильно классифицировать. В несбалансированном обучении это делается путем обучения классификатора и получения выборки данных только для выборки, которые подходят для классификации. По умолчанию классификатор выбирается как случайный лес со 100 оценщиками. Для каждого класса выбираются выборки, предсказание которых имеет наивысшие вероятности. Это делается путем рассмотрения q-го процентиля вероятностей, где
q = 1 — #(выборки в меньшинстве)/#(выборки в рассматриваемом классе).
Следовательно, набор данных не может иметь одинаковый размер для всех классов, но он более сбалансирован.

from imblearn.under_sampling import InstanceHardnessThreshold

cc = InstanceHardnessThreshold()
X_res, y_res = cc.fit_resample(X_input, y_input)

X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=20)

scaler = StandardScaler()
scaler.fit(X_train)
X_transform = scaler.transform(X_train)

for _ in range(10):
    model.load_weights("weights.hf5")
    history = model.fit(X_transform, y_train, epochs=60, verbose = 0)

Идея может быть оценена как несправедливая, так как плохо классифицированные образцы удаляются из набора данных. Однако идея та же, что и в Near Miss, когда удаляются данные, расположенные близко или далеко от границы класса. Будет интересно, если это поможет брать только наиболее классифицированные образцы.

Удивительно, но точность для класса 2 увеличивается

Отредактированное правило ближайшего соседа / Все k-NN

Отредактированный ближайший сосед (ENN), основанный на [06] Уайлдона в 1972 году, а также находит ближайших соседей неправильно классифицированных образцов. Основная идея состоит в том, чтобы применить k-ближайшего соседа, где k=3, к ошибочно классифицированным точкам данных. Остаются правильно классифицированные образцы. All kNN является расширением ENN, опубликованного в 1976 году [07] Томеком, где в ходе итерации все неправильно классифицированные образцы удаляются. Это приводит к запутанному результату на следующем рисунке: Многие образцы из класса Slight правильно классифицируются методом ближайшего соседа.

Фатальный класс остается в своем размере, в то время как в классе Slight удаляется всего 20 000 сэмплов. На 1148 образцов класс Serious теперь меньше, чем класс Fatal.

from imblearn.under_sampling import AllKNN

cc = AllKNN()
X_res, y_res = cc.fit_resample(X_input, y_input)

X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=20)

scaler = StandardScaler()
scaler.fit(X_train)
X_transform = scaler.transform(X_train)

for _ in range(10):
    model.load_weights("weights.hf5")
    history = model.fit(X_transform, y_train, epochs=60, verbose = 0)

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

Правило уборки по соседству

Этот метод Лауриккала из 2001 [08] является модификацией метода Edated Nearest Neighbor (ENN). Во-первых, обучается 3 ближайших соседа, и ошибочно классифицированные выборки удаляются, если они принадлежат к мажоритарному классу. Если образец принадлежит к классу меньшинства, удаляются 3 образца, наиболее близкие к классу большинства.

Томек Ссылки

Последний метод, который мы рассматриваем, — это Tomek Links. В [07] автор предложил удалять выборки на границе класса. Здесь ссылка Томека - это пара выборок (a, b), где a и b принадлежат к разным классам, если не существует выборки c такой, что для расстояния d d (a, c) ‹ d (a, b) и d(b,c) ‹ d(a,b).

Сравнение результатов

В дополнение ко всем введенным методам мы также рассматриваем случайную выборку большинства классов. На приведенном выше рисунке показан первый обзор всех методов недостаточной выборки с точки зрения точности для набора данных с недостаточной выборкой («Частично») и «Полного» набора данных. Из-за широкого диапазона графика не дает хорошего обзора. Следовательно, мы рассматриваем результаты следующим образом как графики рассеяния, где мы рассматриваем средние значения результатов.

Мы наблюдаем, что работа с сокращенным набором данных может принести лучшие результаты, чем базовый уровень, который составляет 77% от общего набора данных. Поскольку лучшие методы, TomekLinks, Neighbourhood Cleaning Rule и All kNN, учитывают все еще несбалансированные наборы данных, нам нужно смотреть на точность и полноту для каждого звоните отдельно.

Точность дает соотношение правильных предсказанных классов определенного класса и всех предсказанных значений, истинно положительных и ложноотрицательных. Следовательно, если класс «фатальный» имеет прогноз 0,52, то, когда модель прогнозирует этот класс, вероятность того, что это верно, составляет 52%. Мы ясно видим, что недостаточная выборка улучшает точность большинства классов при рассмотрении полного набора данных, в то время как класс меньшинства дает худшие результаты для полного набора данных. Конечно, мы наблюдаем, что, учитывая сокращенный набор данных, класс меньшинства также имеет хорошую точность.

Напомним, дает соотношение правильно предсказанных классов определенного класса и всех значений этого класса, истинно положительных и ложноположительных. Следовательно, если класс «серьезный» имеет полноту 0,1, то 10% этого класса предсказано правильно. Точность и полнота подобны двум частям весов: если мне нужен хороший отзыв, что означает отсутствие ложных срабатываний, тогда точность уменьшается по мере увеличения числа ложноотрицательных результатов. Следовательно, мы видим тот же эффект, что и при точности: класс меньшинства улучшает свою полноту. Cluster Centroids — лучший метод для этого подхода. Класс «Серьезный» не имеет хороших результатов; мы видим, что ни один метод не дает хороших улучшений для этого класса.

Припоминание также можно рассматривать как среднее геометрическое, где учитывается среднее геометрическое ряда всех отзывов. Это означает здесь 3-корень произведения всех отзывов. Это показывает, что все методы улучшают результаты, но TomekLinks, Neighbourhood Cleaning Rule и All kNN улучшаются недостаточно сильно. Случайная недостаточная выборка приносит удивительно хорошие улучшения, и в Recall Graph это всегда относится к лучшим методам.

Мы также учитываем макроусредненную среднюю абсолютную ошибку. Здесь абсолютная ошибка вычисляется для каждого класса отдельно, а затем усредняется. Лучшее значение — 0. Кроме того, здесь случайный выбор дает наилучшую производительность для всего набора данных. Instance Hardness Threshold также дает хорошие результаты.

Заключение

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

Точность можно улучшить только в мажоритарном классе. Это означает, что у нас нет ложноотрицательных результатов, но допустимы ложноположительные результаты. Если мы хотим предсказать класс «Легкий», то мы можем улучшить производительность в том смысле, что при прогнозировании «Легкий» не будет неправильно классифицированных образцов из классов «Фатальный» или «Серьезный». Однако предсказание классов меньшинства может быть неверным, поскольку существует огромная вероятность того, что истинный класс — «Легкий». Если вы хотите быть уверены, что когда ваш класс большинства всегда предсказывается правильно, то лучшими вариантами являются такие методы, как Instance Hardness Threshold, Cluster Centroids или Near Miss Version 2. .

Вспомнить можно только улучшить в классах меньшинства. Это означает, что у нас нет ложных срабатываний, но допустимы ложные отрицания. Если мы хотим предсказать класс, отличный от «фатального», то мы можем улучшить производительность в том смысле, что не будет сделана неправильная классификация. Например, предсказание «Слабое» не будет иметь ошибок в классификации, если истинный класс — «Фатальный».

Большинство методов имеют низкую производительность при отзыве для класса 'Slight', но для TomekLinks, Neighbourhood Cleaning Rule и All kNN производительность остается такой же отличной. как обученный с полным набором данных. Это вызвано отсутствием реальной балансировки.

Мы не можем наблюдать отличного улучшения для класса Seroius.

Показатели «средняя геометрическая оценка» и «усредненная макроэкономическая ошибка» дают общее представление об улучшении классификатора. Случайная недостаточная выборка — лучший метод для полного набора данных, который улучшает классификацию. Это интересный факт, что исследования восходят к 70-м годам, а также проводятся в более поздние годы. Однако лучшего общего метода, чем случайная выборка, найти не удалось.

Мы продолжим поиск методов решения проблемы несбалансированных наборов данных, рассматривая методы передискретизации.

Использованная литература:

[01] Данные о безопасности дорожного движения — data.gov.uk, Содержит информацию государственного сектора под лицензией Open Government License v3.0. .io)»
[03] Объяснение сюжетов для скрипки. Узнайте, как использовать скрипичные сюжеты и что… | Эрик Левинсон | На пути к науке о данных
[04] Чжан, Мани, «Подход kNN к несбалансированному распределению данных: пример извлечения информации, ICML 2003 »
[05] Смит, Мартинес, Жиро-Кэрриер , «Анализ сложности данных на уровне экземпляра, Mach Learn 95:225–256, 2014»
[06] Уилсон, «Асимптотические свойства правил ближайшего соседа с использованием отредактированных данных, IEEE Transactions on Systems, Man, и кибернетика, 1972 г.»
[07] Томек, «Эксперимент с отредактированным правилом ближайшего соседа, IEEE Transactions on Systems, Man, and Cybernetics, 1976 г.»
[08] Лауриккала, « Улучшение идентификации сложных малых классов путем балансировки распределения классов, Конспекты лекций по информатике, 2001 г. Как именно работает UMAP. И чем именно он лучше tSNE | Николай Осколков | На пути к науке о данных (medium.com)