Какое распределение классов в обучающей выборке
Перейти к содержимому

Какое распределение классов в обучающей выборке

  • автор:

Борьба с несбалансированностью классов с помощью модуля NEARMISS

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

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

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

Давайте рассмотрим работу этого метода на практике. Для начала установим необходимые нам библиотеки через стандартный pip в cmd:

pip install pandas pip install numpy pip install sklearn pip install imblearn

Я буду использовать набор данных о сессиях, связанных с поведением пользователей на веб-страницах онлайн-магазина.

import pandas as pd import numpy as np df = pd.read_csv('online_shoppers_intention.csv') df.shape

Столбец для прогнозирования называется «Revenue» и может принимать 2 значения: True (пользователь совершил покупку) и False (пользователь не совершил покупку). Посмотрим, какое количество наблюдений приходится на каждый из классов.

df['Revenue'].value_counts()

Как видно, классы являются несбалансированными, поскольку делятся примерно в соотношении 85% и 15%.

Разделим наблюдения на обучающую и тестовую выборки:

Y = df['Revenue'] X = df.drop('Revenue', axis = 1) feature_names = X.columns from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.3, random_state = 97)

Посмотрим на размерность сформированных наборов данных:

print('Размерность набора данных X_train: ', X_train.shape) print('Размерность набора данных Y_train: ', Y_train.shape) print('Размерность набора данных X_test: ', X_test.shape) print('Размерность набора данных Y_test: ', Y_test.shape)

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

from sklearn.linear_model import LogisticRegression lregress1 = LogisticRegression() lregress1.fit(X_train, Y_train.ravel()) prediction = lregress1.predict(X_test) print(classification_report(Y_test, prediction))

Отметим, что точность модели 88%. Колонка «recall» показывает меру полноты классификатора, способность классификатора правильно находить все положительные экземпляры. Из неё видно, что отзыв миноритарного класса гораздо меньше, то есть модель более склонна к классу большинства.

Перед применением метода NearMiss выведем количество наблюдений каждого класса:

print('Перед применением метода кол-во меток со значением True: <>'.format(sum(y_train == True))) print('Перед применением метода кол-во меток со значением False: <>'.format(sum(y_train == False)))

Перед применением метода количество меток со значением True: 1334

Перед применением метода количество меток со значением False: 7297

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

from imblearn.under_sampling import NearMiss nm = NearMiss() X_train_miss, Y_train_miss = nm.fit_resample(X_train, Y_train.ravel()) print('После применения метода кол-во меток со значением True: <>'.format(sum(Y_train_miss == True))) print('После применения метода кол-во меток со значением False: <>'.format(sum(Y_train_miss == False)))

После применения метода количество меток со значением True: 1334

После применения метода количество меток со значением False: 1334

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

lregress2 = LogisticRegression() lregress2.fit(X_train_miss, Y_train_miss.ravel()) prediction = lregress2.predict(X_test) print(classification_report(Y_test, prediction))

Значение отзывов меньшинства повысилось до 84%. Но из-за того, что выборка большего класса значительно уменьшилась, понизилась точность модели до 61%. Таким образом, этот метод действительно помог справиться с несбалансированностью классов.

  • несбалансированные классы
  • nearmiss
  • машинное+обучение
  • Python
  • Программирование
  • Машинное обучение

Сэмплинг в условиях несбалансированности классов

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

В машинном обучении нередко возникают ситуации, когда в обучающем наборе данных доля примеров некоторого класса оказывается слишком низкой (такой класс часто называют миноритарным), а другого — слишком большой (такой класс называют мажоритарным). Эта ситуация в теории машинного обучения известна как несбалансированность классов (class imbalance), а классификация в условиях несбалансированности классов называется несбалансированной классификацией (unbalanced classification).

Несбалансированность классов как правило создаёт проблемы при решении задач классификации, поскольку построенные на таких данных модели имеют «перекос» в сторону мажоритарного класса, т.е. с большей вероятностью присваивают его метку класса новым наблюдениям при практическом использовании модели. Данное явление известно как переоценка (overestimation). Если модель построена так, что отдаёт предпочтение миноритарному классу, то имеет местно недооценка (underestmation).

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

Действительно, если классификатор в системе кредитного скоринга определит «плохого» заёмщика как «хорошего» и ему будет выдан кредит, то при банкротстве последнего банк потенциально теряет всю сумму кредита. Напротив, если «хороший» заёмщик будет классифицирован как «плохой», банк рискует только упущенной выгодой в виде процентов.

Очевидно, что классификация в условиях несбалансированности классов должна производиться с учётом неравенства издержек классификации. Модель должна быть настроена таким образом, чтобы минимизировать число ошибок классификации, связанных с большими издержками. Такой тип классификации известен как классификация, чувствительная к издержкам (cost-sensitive classification).

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

Процесс балансировки классов реализуется с помощью соответствующих алгоритмов сэмплинга, которые можно разделить на случайные и специальные. Ребалансировка классов может происходить путём увеличения числа примеров миноритарного класса (undersampling), либо путём сокращения числа примеров мажоритарного (oversampling). Возможно также и сочетание обоих подходов.

Сокращение числа примеров мажоритарного класса

Существует несколько стратегий балансировки обучающих выборок путём сокращения числа примеров мажоритарного класса.

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

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

Поиск связей Томека (Tomek Links). Пусть в наборе данных имеется пара наблюдений E_i и E_j , принадлежащих различным классам. Обозначим расстояние между векторами этих наблюдений в пространстве признаков как d(E_i,E_j) . Пара наблюдений (E_i,E_j) называется связью Томека, если они относятся к разным классам и не существует точки E_k , такой, что d(E_i,E_k)

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

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

Правило соcредточенного ближайшего соседа (Condensed Nearest Neighbor Rule). Из исходного набора данных L извлекаются все примеры миноритарного класса и один мажоритарного (обозначим полученное подмножество как S ). Затем производится классификация всех примеров из L по методу одного ближайшего соседа (1-NN), когда каждому, случайно выбранному наблюдению присваивается метка класса ближайшего соседа. При этом, если для наблюдения допущена ошибка классификации (найденный и фактический классы не совпадают), то оно добавляется в S .

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

Односторонний сэмплинг (One-side sampling, one-sided selection — OSS). В основе идеи данного подхода лежит сочетание двух предыдущих. На первом шаге применяется правило сосредоточенного ближайшего соседа, а на втором — удаляются все мажоритарные наблюдения, участвующие в связях Томека. Таким образом, удаляются большие «сгустки» мажоритарных наблюдений, а затем область пространства со скоплением миноритарных очищается от мажоритарных, которые создают эффект шума на границах классов и мешают их распознаванию.

Правило «очищающего» соседа (neighborhood cleaning rule — NCR). Идея здесь такая же, как и у одностороннего сэплинга. Все наблюдения классифицируются по правилу трех ближайших соседей (3-NN). Затем удаляются следующие примеры мажоритарного класса:

  • которые правильно распознаны;
  • являющиеся соседями миноритарных примеров, которые были неверно классифицированы.

Преимущество данного подхода в том, что увеличение области соседства позволяет лучше «очищать» данные от шумов.

Теперь рассмотрим другой подход — увеличение числа примеров миноритарного класса.

Увеличение числа примеров миноритарного класса

Дублирование примеров миноритарного класса (Oversampling). Самый простой метод – это дублирование примеров миноритарного класса. В зависимости от того, какое соотношение классов необходимо получить в выборке, выбирается случайным образом соответствующее количество наблюдений для дублирования.

Такой подход к восстановлению баланса не всегда является наиболее эффективным, поэтому был предложен специальный метод увеличения числа наблюдений миноритарного класса – алгоритм SMOTE (Synthetic Minority Oversampling Technique).

Алгоритм SMOTE. В основе алгоритма лежит идея генерации некоторого количества искусственных наблюдений, которые были бы «похожи» на наблюдения, имеющиеся в миноритарном классе, но при этом не дублировали их. Для создания нового примера находят разность d=X_b−X_a , где X_a и X_b — векторы признаков соседних наблюдений a и b из миноритарного класса, которые находят с помощью метода ближайшего соседа.

Для наблюдения b формируется область из k соседей, из которых в дальнейшем выбирается наблюдение. Затем X_a и X_b умножаются на некоторое случайное значение из интервала (0, 1) в результате чего исходное расстояние d преобразуется к \widehat . Затем путём суммирования X_a и \widehat вычисляются координаты вектора нового наблюдения.

Поясним сказанное на следующем примере (рис.4).

На рисунке для примера миноритарного класса X_1 определяются 5 ближайших соседей того же класса X_2, X_3, X_4, X_5 и X_6 . Затем вычисляется расстояние между X_1 и каждым из них: d(X_1,X_2), . d(X_1,X_6) . Эти расстояния показаны линиями.

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

Алгоритм SMOTE позволяет задавать количество наблюдений, которое необходимо искусственно сгенерировать. При этом степень сходства примеров a и b можно регулировать путем изменения числа ближайших соседей: чем оно меньше, тем выше будет степень сходства.

Недостатком данного подхода является то, что алгоритм просто увеличивает плотность наблюдений в областях векторного пространства, «населённых» преимущественно миноритарным классом. Т.е. работает эффективно, когда такие области имеются. Если же примеры миноритарного класса расположены равномерно, то в результате только увеличивается перемешивание классов, что затрудняет классификацию. Это проиллюстрировано на рисунке 5.

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

Решить данную проблему позволяет модификация SMOTE, которая получила название ASMO (Adaptive Synthetic Minority Oversampling). Алгоритм ASMO состоит из следующих шагов:

  • Если для каждого i -ого примера миноритарного класса из k ближайших соседей g≤k принадлежит к мажоритарному, то набор данных считается «рассеянным». В этом случае используют алгоритм ASMO, иначе применяют SMOTE (как правило, g задают равным 20).
  • Используя только примеры миноритарного класса, выделить несколько кластеров (например, с помощью алгоритма k-средних), как показано на рисунке 6.
  • Сгенерировать искусственные записи в пределах отдельных кластеров на основе всех классов. Для каждого примера миноритарного класса находят m ближайших соседей, и на основе них (также как в SMOTE) создаются новые записи.

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

Алгоритм ADASYN. Ещё одним недостатком алгоритма SMOTE является то, что он для каждого примера миноритарного класса создаёт одно и то же количество искусственных примеров. Это не вполне оптимально, поскольку не все примеры одинаково «просты» в обучении. Например, наблюдения, расположенные вблизи границ классов обычно «перемешаны» с наблюдениями соседнего класса, поэтому алгоритму обучения сложнее их распознать. Тогда при оверсэмплинге для таких примеров логично генерировать больше искусственных наблюдений, чтобы сделать границу класса более чёткой. На этом принципе и основана работа алгоритма ADASYN.

Путь имеется выборка S , содержащая m наблюдений x_i,y_i, i=1..m . Здесь x_i — n -мерный вектор признаков, y_i — метка класса. Обозначим m_r и m_x — число объектов миноритарного и мажоритарного класса соответственно, так что m_r

Алгоритм состоит из следующих шагов.

  1. Вычислить показатель несбалансированности классов: d=m_r/m_x .
  2. Задать порог максимально допустимого показателя несбалансированности d_ и проверить, выполняется ли условие d
  3. Определить число искусственных наблюдений, которое должно быть сгенерировано из миноритарного класса: G=(m_x−m_r)⋅β , где β — уровень баланса выборки. Так, β=1 означает, что выборка полностью сбалансирована.
  4. Для каждого наблюдения x_i из миноритарного класса найти k ближайших соседей на основе расстояния Евклида и вычислить отношение r_i=Δ_i/k , где Δ_i — количество из k ближайших соседей вектора x_i , которые принадлежат к мажоритарному классу, т.е. r_i∈[0,1] .
  5. Нормализовать r_i в соответствии с выражением:
    \widehat_=_/\sum\limits_^r_ .
  6. Вычислить количество искусственных примеров, которые нужно сгенерировать для каждого примера миноритарного класса x_i: g_=\widehat_\cdot G , где G — общее число искусственных примеров, которое должно быть сгенерировано для миноритарного класса.
  7. Для каждого примера миноритарного класса x_i генерировать искусственные примеры g_i в процессе выполнения следующего цикла:
    • случайно выбрать один пример миноритарного класса x_ из k ближайших соседей x_i ;
    • сгенерировать искусственный пример s_=x_+(x_-x_)\cdot \lambda , где λ — случайное число из диапазона [0, 1].

Таким образом, ключевая идея алгоритма ADASYN заключается в использовании \widehat_ в качестве критерия для автоматического определения количества искусственных примеров, которые необходимо сгенерировать для каждого миноритарного примера. Фактические, \widehat_ это показатель распределения весов для различных примеров миноритарного класса в соответствии с их уровнем сложности для обучения.

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

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

Другие материалы по теме:

Дисбаланс классов

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

В задаче классификации данные называются несбалансированными (Imbalanced Data), если в обучающей выборке доли объектов разных классов существенно различаются, также говорят, что «классы не сбалансированы». Есть понятие несбалансированности и для задач регрессии, но там оно граничит с наличием аномалий в данных, поэтому здесь мы будем рассматривать только задачи классификации и для простоты – бинарной классификации. На рис. 1 (слева) схематически показан дисбаланс: розовым цветом – объекты «большого» класса 0 и синим – объекты «малого» класса 1. Не надо путать дисбаланс с разреженностью, на рис. 1 (справа) показаны данные в виде матрицы (например «user-item»), лишь для небольшого числа элементов матрицы известна метка, поэтому говорят о разреженности данных, но пропорции классов примерно равны.

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

Что делать при дисбалансе?

Такой вопрос часто задают на собеседованиях, есть блог-заметки и ютуб-ролики на эту тему, почти все они дают ложное представление о дисбалансе. Обычно рекомендуют давать такой ответ – надо сделать перебалансировку данных: недо- или пере- сэмплирование (определим дальше), иногда вспоминают аббревиатуру SMOTE. Сейчас поговорим о том, что подобный ответ не учитывает теорию и практику классификации.

Во-первых, при ответе на вопрос надо обязательно уточнить природу задачи: в чём причина дисбаланса, сколько классов, насколько серьёзный дисбаланс, какими данными и мета-данными мы располагаем. Например, очень часто к дисбалансу приводит наличие дубликатов, первое напрашивающееся действие – устранить дубликаты. Также часто дисбаланс возникает в задаче с очень большим числом классов и некоторые классы малы по естественным причинам, например это генотипы представителей малых народов. Удивительно, но в этом случае бывает не так важно, относит ли алгоритм какие-то объекты к малым классам. Если позитивных (класса 1) объектов в обучении крайне мало, например 1-3 на 1 миллион объектов (а такие задачи бывают, например, когда позитивный класс – катастрофы или большие экономические кризисы), то задачу логично решать как детектирование аномалий (здесь мы не будем подробно описывать пайплайн решения). Дисбаланс может меняться со временем, например пропорции классов могут сильно отличаться в обучении и контроле – это отдельная ситуация и здесь логично «выравнивать» пропорции классов в обучении и контроле (чтобы обучение было похоже на контроль). Дисбаланс может быть из-за недостатка размеченных данных (например, порция данных с объектами класса 1 не была полностью размечена), тут есть варианты использования, например, синтетических данных. Наконец, всего перечисленного может не быть, у нас обычная бинарная задача классификации, пропорции классов не меняются со временем и процент объектов класса 1 – от 2% до 10%. Такую ситуацию и рассмотрим дальше (она соответствует, например, задаче банковского скоринга в стабильной экономической обстановке).

Во-вторых, надо уточнить функцию ошибки (функционал качества). Почему это важно? Если используется LogLoss, то каких-то «танцев с перебалансировкой» делать не только не нужно, но и недопустимо, поскольку это делает решение (алгоритм) неоткалиброванным. Если используется ROC AUC, то перебалансировка и многие другие рецепты не влияют на значение функционала (будет изменение в третьем знаке после запятой). Если используется F1-мера, то тут уже интереснее – подобные функции ниже и рассмотрим.

Но прежде чем говорить о настройке на F1-меру (и другие похожие на неё функционалы), давайте осознаем, а что означает эта настройка. Допустим у нас две корзины, в каждой 10 шаров, в первой – 1 чёрный, во второй тоже 1 чёрный, все остальные шары белые, см. рис. 2. Сейчас мы вытащим шар из корзины (это будет случайная корзина, они равновероятны, но мы будем знать из какой корзины берётся шар), надо угадать его цвет. Рассмотрим прогноз «шар белый», его точность (accuracy)

0.5 x 0.9 + 0.5 x 0.9 = 0.9,

его F1-мера равна нулю. Рассмотрим прогноз «шар из перовой корзины белый, а из второй – чёрный», его точность (accuracy)

0.5 x 0.9 + 0.5 x 0.1 = 0.5,

его F1-мера равна 2/(1/0.1 + 1/0.5)) = 0.16(6). Мы увеличили F1-меру, но что означает это увеличение? Стал ли наш прогноз более адекватным и вообще, научились ли мы угадывать цвет? Очевидно, нет! Кстати, противоположный прогноз «шар из первой корзины чёрный, а из второй – белый» обладает такими же показателями качества. Дальше мы не будем расписывать, что из этого следует, наиболее сообразительные догадаются сами;) Но самое главное – F1-мера может расти не из-за того, что прогноз становится «адекватнее», а как раз из-за того, что он становится нетривиальным (как и многие другие показатели качества).

В-третьих, нужно уточнить контекст вопроса. Есть выражение «проблема дисбаланса», но на самом деле, никакой проблемы дисбаланса нет! Дисбаланс – это естественное свойство данных. Когда говорят, что в этом случае использование точности неправильно, т.к. формально высокая точность получается у константного решения (см. пример с шарами), то это проблема выбора функционала качества при дисбалансе, а не самого дисбаланса. Когда говорят, что при настройке моделей они превращаются в константные, то это проблема настройки, выбора loss-функции и порога бинаризации. Если ошибки первого и второго рода имеют разную цену (обычно ошибочная классификация объектов малого класса стоит дороже), то это надо напрямую учитывать при обучении алгоритмов (с помощью весов классов, об этом ниже). Также возможно в вопросе про дисбаланс имеется в виду изменение пайплайна решения задачи, например использование стратифицированного контроля (его обязательно надо использовать, хотя в большинстве современных библиотек машинного обучения он включён по умолчанию).

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

Перебалансировка данных / изменение выборки

На рис. 3 показана идея перебалансировки: мы делаем классы сбалансированными, для этого заменяем большой класс подвыборкой по мощности равной малому классу – это называется недосэмлированием (Undersampling the majority class) или «увеличиваем в размерах малый класс» – это называется пересемплированием (Oversampling the minority class). Простейшая стратегия недосэмплирования – взять случайную подвыборку, простейшая стратегия пересэмплирования – продублировать объекты малого класса. О более «умных» поговорим дальше. У пересэмплирования качество, как правило выше, т.к. мы используем все данные, однако недосэмплирование позволяет учить модель на маленькой выборке (можно кстати, строить ансамбль над алгоритмами, обученными на разных недосэмплированиях).

Nearmiss1/2, Tomek links, Edited nearest neighbors (ENN)

Основная идея «умного недосэмплирования» – брать из большого класса только объекты важные для решения рассматриваемой задачи. Стратегия метода NearMiss-1 – из большего класса выбираем объекты, у которых среднее расстояний до N ближайших малого класса наименьшее, т.е. из граничной зоны (первая картинка рис. 4.1). Стратегия метода NearMiss-2 – из большего класса выбираем объекты, у которых среднее расстояний до N дальних малого класса наименьшее (вторая картинка рис. 4.1). Стратегия метода Tomek links – удалить объекты большого класса, образующие связи Томека (объекты двух разных классов образуют связь Томека, если нет объекта, который ближе к одному из них при этом являясь объектом другого класса, см. рис. 4.1). Стратегия ENN – сделать скользящий контроль, например по 10 фолдам, удалить объекты большого класса, на которых ближайший сосед ошибается. В последних двух методах не гарантируется выравнивание классов по мощности. Заметим, что последний метод может быть использован вместе с какой-то моделью алгоритмов (и «отвязан» от конкретной метрики), а предыдущие методы ориентировались на метрику. Есть и другие стратегии недосэмплирования, но общая идея должна быть понятна.

Ни рис. 4.2 показано применение различных стратегий недосэмлирования от случайной до ENN, в подписи они названы по именам соответствующих функций из библиотеки imblearn. Исходные данные изображены на первой картинке рис. 5.2.

SMOTE = Synthetic Minority Oversampling Techniques, ADASYN = Adaptive Synthetic

Идея метода SMOTE: увеличить малый класс за счёт представителей выпуклых комбинаций пар (см. рис. 5.1). Подобная идея реализуется в современных методах аугментации, например в MixUp. В методе SMOTE для точки малого класса выбирается один из k ближайших соседей и на отрезке между ними случайно выбирается новый объект. Почему-то нигде в описаниях не указывается, но в качестве k ближайших соседей рассматриваются только объекты малого класса. Есть разные модификации метода, например такие, в которых все точки делятся на группы, в зависимости от процента «чужих» в окрестности (от этого зависит вероятность порождения нового объекта).

Метод ADASYN аналогичен SMOTE, но число объектов, которые генерируются с помощью объекта малого класса, пропорционально числу чужаков (объектов большого класса) в его окрестности.

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

Взвешивание объектов

Большинство методов реализованных в sklearn имеет параметр «веса объектов» или «веса классов», обычно берут веса объектов большого класса 0 равным 1, а веса объектов малого класса 1 – m0 / m1 , где m0, m1 – число объектов в классах 0 и 1 соответственно. Обычно при настройке алгоритма классификации минимизируют эмпирический риск

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

Нетрудно видеть, что весовые схемы обобщают идею сэмплирования, но являются более удобной, простой и гибкой техникой. Чтобы не задумываться о значении весов можно в sklearn выбрать class_weight=’balanced’.

Отметим также, что есть функции, которые не зависят от пропорции классов. Например, если функция устроена не в виде суммы ошибок на объектах, а в виде суммы ошибок на парах объектов разных классов как ROC AUC.

Решающее правило: выбор порога

Обычно модель получает некоторые оценки принадлежности к классам, а сама классификация – это результат бинаризации (по умолчанию порог = 0.5). Но порог можно подбирать, мы рассмотрим простую стратегию: при скользящем контроле по 10 фолдам получим оценки принадлежности классу 1 на обучении (функция cross_val_predict в sklearn), потом для заданного функционала качества подберём оптимальный порог бинаризации (при котором значение функционала максимально). Этот же порог будем потом использовать на тесте.

Технику выбора порога можно использовать совместно с перевзвешиванием выборки и балансировкой данных. На рис. 6 (слева) показано, как значения качества зависят от выбора порога, на рис. 6 (справа) аналогичные графики приведены после перевзвешивания, видно что «графики растягиваются» и оптимальные пороги смещаются вправо, но при этом оптимальные значения порогов отличны от 0.5.

Что использовать на практике

Давайте проведём несколько простых экспериментов, они довольно наглядно пояснят, что и как работает в разных ситуациях на практике. Решаемые задачи (реальные или модельные) не так важны, поэтому мы взяли их из стандартных генераторов sklearn-а. Но вот геометрия данных и используемые модели будут важны. Рассмотрим задачу «два полумесяца» с сильным дисбалансом и разной степенью зашумлённости данных, см. рис. 7.

Сначала решим задачу с помощью логистической регрессии (хотя здесь нет линейной зависимости, решение должно получиться неплохим), а также с помощью градиентного бустинга (воспользуемся библиотекой LightGBM). Гиперпараметры в обоих методах не будем настраивать и возьмём значения рекомендованные «по умолчанию». В таблицах ниже каждая строка соответствует своему показателю качества, первые пять (точность, сбалансированная точность, каппа Коэна, F1-мера и коэффициент Мэттьюса) зависят от бинаризации (именно они наиболее интересны), остальные (logloss, площади под ROC и PR кривыми) – не зависят. Первый столбец (None) – алгоритм с параметрами по умолчанию, второй (Weights) – использование взвешивания классов, третий (Th-d) – подбор порога на 10-fold-контроле, четвёртый (Th-d + W) – совмещение взвешивания и подбора порога, следующие три столбца – разные техники пересэмплирования, последние пять столбцов – разные техники недосэмплирования.

Какие выводы можно сделать?

Подбор порога (без совмещения с любой другой техникой) – идеальная стратегия для «нешумных данных». На самом деле, только это и надо использовать, когда геометрия данных относительно проста, модель хорошо описывает данные (и особенно, если хорошо откалибрована). Обратим внимание, что качество признакового пространства (шум и геометрия) в классическом ML зависит исключительно от Вас, поэтому, если Вы умеете решать задачи, то кроме подбора порога Вам ничего не нужно. Бустинг, который идеально справился с задачей, показывает хорошее качество по умолчанию или с использованием весовой схемы (т.е. достаточно оптимизировать гиперпараметры). Вообще, полезно запомнить – хорошие признаки и правильно подобранная модель это самое главное в ML, всё остальное от лукавого (и не важно есть дисбаланс или нет его).

Неужели описанные схемы сэмплирования особо не нужны? На самом деле, для любой схемы можно найти применение (надо только взять «не очень подходящую» модель и/или увеличить шум). В табл. ниже показано качество метода случайный лес, видим, что SMOTE здесь явно предпочтителен (хотя сами показатели значительно просели).

Какие ещё методы существуют?

В DL есть свои методы учёта дисбаланса. Перебалансировка выборки здесь чаще производится на уровне батчей (например, так делали при формировании батчей для обучения R-CNN), причём её можно совместить с аугментацией (про MixUp мы уже вспоминали). Также есть специфические задачи, в которых дисбаланс связан ещё и с эффективностью вычислений, см. например Negative Sampling. Кроме того, есть специальные функции ошибок для обучения нейросетей при дисбалансе, например focal loss (она же используется для калибровки сетей). Ниже дадим ссылку на очень хороший обзор.

Ссылки

Содержание поста сильно коррелирует с аналогичной лекцией автора в программе OzonMasters (на которую недавно стартовал новый набор).

  • Ноутбук с кодом экспериментов (на примере логистической регресии)
  • Библиотека, в которой реализовано большинство описанных методов
  • Статья про SMOTE
  • Статья про ADASYN
  • Неплохой обзор стратегий сэмплирования
  • Обзор по методам обучения глубоких сетей на несбалансированных данных

Алгоритмы сэмплирования

Сэмплирование (англ. data sampling) — метод корректировки обучающей выборки с целью балансировки распределения классов в исходном наборе данных. Нужно отличать этот метод от сэмплирования в активном обучении для отбора кандидатов и от сэмплирования в статистике [1] для создания подвыборки с сохранением распределения классов.

Неравномерное распределение может быть следующих типов:

  • Недостаточное представление класса в независимой переменной;
  • Недостаточное представление класса в зависимой переменной.

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

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

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

Стратегии сэмплирования

  • Cубдискретизация (англ. under-sampling) — удаление некоторого количества примеров мажоритарного класса.
  • Передискретизации (англ. over-sampling) — увеличение количества примеров миноритарного класса.
  • Комбинирование (англ. сombining over- and under-sampling) — последовательное применение субдискретизации и передискретизации.
  • Ансамбль сбалансированных наборов (англ. ensemble balanced sets) — использование встроенных методов сэмплирования в процессе построения ансамблей классификаторов.

Также все методы можно разделить на две группы: случайные (недетерминированные) и специальные (детерминированные).

  • Случайное сэмплирование (англ. random sampling) — для этого типа сэмплирования существует равная вероятность выбора любого конкретного элемента. Например, выбор 10 чисел в промежутке от 1 до 100. Здесь каждое число имеет равную вероятность быть выбранным.
    • Сэплирование с заменой (англ. sampling with replacement) — здесь элемент, который выбирается первым, не должен влиять на вторую или любую другую выборку. Математически, ковариация равна нулю между двумя выборками. Мы должны использовать выборку с заменой, когда у нас большой набор данных. Потому что, если мы используем выборку без замены, то вероятность для каждого предмета, который будет выбран, будет изменяться, и она будет слишком сложной после определенного момента. Выборка с заменой может сказать нам, что чаще встречается в наших данных.
    • Сэмплирование без замены (англ. sampling without replacement) — здесь то, что мы выбираем первым, повлияет на второе. Выборка без замены полезна, если набор данных мал. Математически, ковариация между двумя выборками не равна нулю.

    Метод Uncertainty Sampling

    Идея: выбирать [math]x_i[/math] с наибольшей неопределенностью [math]a(x_i)[/math] .

    Задача многоклассовой классификации:

    [math]a(x)=\arg\max\limits_P(y \mid x)[/math]

    [math]p_k(x), k=1\ldots\left | Y \right |[/math] — ранжированные по убыванию [math]P(y \mid x), y\in Y[/math] .

    • Принцип наименьшей достоверности (англ. least confidence):
    • Принцип наименьшей разности отступов (англ. margin sampling):
    • Принцип максимума энтропии (англ. maximum entropy):

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

    Примеры алгоритмов

    Рис. [math]1[/math] . Случайное удаление примеров мажоритарного класса

    Cубдискретизация (удаление примеров мажоритарного класса)

    Случайное удаление примеров мажоритарного класса (англ. Random Undersampling)

    Это самый простой алгоритм. Рассчитывается число [math]K[/math] – количество мажоритарных примеров, которое необходимо удалить для достижения требуемого уровня соотношения различных классов. Затем случайным образом выбираются K мажоритарных примеров и удаляются. На рис. [math]1[/math] изображены примеры некоторого набора данных в двумерном пространстве признаков до и после использования алгоритма.

    Поиск связей Томека (англ. Tomek Links)

    Рис. [math]2[/math] . Удаление мажоритарных примеров, участвующих в связях Томека

    Пусть примеры [math]E_i[/math] и [math]E_j[/math] принадлежат к различным классам, [math]d(E_i,E_j)[/math] – расстояние между указанными примерами. Пара [math](E_i,E_j)[/math] называется связью Томека, если не найдется ни одного примера [math]E_l[/math] такого, что будет справедлива совокупность неравенств:

    [math] \begin d(E_i,E_l)\lt d(E_i,E_j),\\ d(E_j,E_l)\lt d(E_i,E_j) \end [/math]

    Согласно данному подходу, все мажоритарные записи, входящие в связи Томека, должны быть удалены из набора данных. Этот способ хорошо удаляет записи, которые можно рассматривать в качестве «зашумляющих». На рис. [math]2[/math] визуально показан набор данных в двумерном пространстве признаков до и после применения стратегии поиска связей Томека.

    Правило сосредоточенного ближайшего соседа (англ. Condensed Nearest Neighbor Rule)

    Рис. [math]3[/math] . Удаление примеров мажоритарного класса правилом сосредоточенного ближайшего соседа

    Пусть [math]L[/math] – исходный набор данных. Из него выбираются все миноритарные примеры и (случайным образом) один мажоритарный. Обозначим это множество как [math]S[/math] . Все примеры из [math]L[/math] классифицируются по правилу одного ближайшего соседа. Записи, получившие ошибочную метку, добавляются во множество [math]S[/math] (рис. [math]3[/math] ). Таким образом, мы будем учить классификатор находить отличие между похожими примерами, но принадлежащими к разным классам.

    Односторонний сэмплинг (англ. One-side sampling, one-sided selection)

    Главная идея этой стратегии – это последовательное сочетание предыдущих двух, рассмотренных выше. Для этого на первом шаге применяется правило сосредоточенного ближайшего соседа, а на втором – удаляются все мажоритарные примеры, участвующие в связях Томека. Таким образом, удаляются большие «сгустки» мажоритарных примеров, а затем область пространства со скоплением миноритарных очищается от потенциального шума.

    Правило «очищающего» соседа (англ. Neighborhood cleaning rule)

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

    • получившие верную метку класса;
    • являющиеся соседями миноритарных примеров, которые были неверно классифицированы.
    Дополнительные
    • Under-sampling with Cluster Centroids [2] — уменьшает количество примеров мажоритарного класса, заменяя некоторые кластеры примеров мажоритарного класса их представителем (центроидом кластера).
    • NearMiss [math](1 \And 2 \And 3)[/math] [3] — удаляет примеры мажоритарного класса, для которых среднее расстояние до ближайших соседей (KNN) миноритарного класса является наименьшим. Также может использоваться расстояние до самых дальних соседей, либо среднее расстояние до всех соседей.
    • Edited Nearest Neighbours [4] — удаляет примеры мажоритарного класса, если при классификации методом KNN они определяются как примеры миноритарного класса.

    Передискретизации (увеличение числа примеров миноритарного класса)

    Дублирование примеров миноритарного класса (англ. Oversampling)

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

    Рис. [math]4[/math] . Искусственно созданные новые примеры миноритарного класса

    SMOTE (англ. Synthetic Minority Oversampling Technique)

    Этот алгоритм основан на идее генерации некоторого количества искусственных примеров, которые были бы похожи на имеющиеся в миноритарном классе, но при этом не дублировали их. Для создания новой записи находят разность [math]d=X_b–X_a[/math] , где [math]X_a[/math] , [math]X_b[/math] – векторы признаков «соседних» примеров [math]a[/math] и [math]b[/math] из миноритарного класса. Их находят, используя алгоритм ближайшего соседа KNN. В данном случае необходимо и достаточно для примера [math]b[/math] получить набор из [math]k[/math] соседей, из которого в дальнейшем будет выбрана запись [math]b[/math] . Остальные шаги алгоритма KNN не требуются. Далее из [math]d[/math] путем умножения каждого его элемента на случайное число в интервале [math](0, 1)[/math] получают [math]\hat[/math] . Вектор признаков нового примера вычисляется путем сложения [math]X_a[/math] и [math]\hat[/math] . Алгоритм SMOTE позволяет задавать количество записей, которое необходимо искусственно сгенерировать. Степень сходства примеров [math]a[/math] и [math]b[/math] можно регулировать путем изменения числа ближайших соседей [math]k[/math] . На рис. [math]4[/math] схематично изображено то, как в двумерном пространстве признаков могут располагаться искусственно сгенерированные примеры.

    В SMOTE (техника избыточной выборки синтетического меньшинства) мы синтезируем элементы для класса меньшинства в непосредственной близости от уже существующих элементов.
    from imblearn.over_sampling import SMOTE
    smote = SMOTE(ratio=’minority’)
    X_sm, y_sm = smote.fit_sample(X, y)
    В библиотеке imblearn есть множество других методов как для недостаточной выборки (Cluster Centroids, NearMiss и т.д.), так и для избыточной выборки (ADASYN и bSMOTE).

    Рис. [math]5[/math] . Негативное влияние алгоритма SMOTE

    ASMO (англ. Adaptive Synthetic Minority Oversampling)

    Рис. [math]6[/math] . Основная идея алгоритма ASMO

    Алгоритм SMOTE имеет недостаток в том, что «вслепую» увеличивает плотность примерами в области слабо представленного класса (рис. [math]5[/math] ). В случае, если миноритарные примеры равномерно распределены среди мажоритарных и имеют низкую плотность, алгоритм SMOTE только сильнее перемешает классы. В качестве решения данной проблемы был предложен алгоритм адаптивного искусственного увеличения числа примеров миноритарного класса ASMO:

    1. Если для каждого [math]i[/math] -ого примера миноритарного класса из [math]k[/math] ближайших соседей [math]g, (g≤k)[/math] принадлежит к мажоритарному, то набор данных считается «рассеянным». В этом случае используют алгоритм ASMO, иначе применяют SMOTE (как правило, [math]g[/math] задают равным [math]20[/math] ).
    2. Используя только примеры миноритарного класса, выделить несколько кластеров (например, алгоритмом [math]\mathrm[/math] -средних).
    3. Сгенерировать искусственные записи в пределах отдельных кластеров на основе всех классов. Для каждого примера миноритарного класса находят [math]m[/math] ближайших соседей, и на основе них (также как в SMOTE) создаются новые записи.

    Такая модификация алгоритма SMOTE делает его более адаптивным к различным наборам данных с несбалансированными классами. Общее представление идеи алгоритма показано на рис. [math]6[/math] .

    Дополнительные
    • SMOTENC [5] — в отличие от SMOTE, работает с непрерывными признаками у примеров обучающей выборки.
    • Borderline-SMOTE [math](1 \And 2)[/math] [6] — в отличие от SMOTE, для создания новых синтетических примеров используются только примеры на границе классов.
    • SVM SMOTE — Support Vectors SMOTE [7] — вариант алгоритма SMOTE, который использует алгоритм SVM для обнаружения примеров, рядом с которыми будут создаваться новые синтетические примеры.

    Алгоритм Метрополиса — Гастингса

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

    • Очередная итерация начинается с состояния [math]x^[/math]
    • Выбираем [math]x^<\prime>[/math] по распределению [math]q(x^\prime; x^)[/math]
    • Вычисляем:
    • С вероятностью [math]a(x^<\prime>, x)[/math] ( [math]1[/math] , если [math]a\geq 1[/math] ) [math]x^:=x^<\prime>[/math] , иначе [math]x^:=x^[/math]

    Сэмплирование по Гиббсу

    Этот алгоритм является частным случаем алгоритма Метрополиса — Гастингса и назван в честь физика Джозайи Гиббса. Он замечателен тем, что для него не требуется явно выраженное совместное распределение, а нужны лишь условные вероятности для каждой переменной, входящей в распределение. Алгоритм на каждом шаге берет одну случайную величину и выбирает её значение при условии фиксированных остальных.
    [math]x_^[/math] выбираем по распределению [math]p(x_\mid x_^,\ldots,x_^,x_^,\ldots,x_^)[/math] и повторяем.
    Это частный случай алгоритма Метрополиса для распределений [math]q(x^<\prime>; x)=p(x_^<\prime>\mid x_)[/math] , и вероятность принятия каждого сэмпла полается равна [math]1[/math] . Поэтому сэмплирование по Гиббсу сходится, и, так как это такое же случайное блуждание по сути, верна та же квадратичная оценка. В больших размерностях может оказаться эффективнее сэмплить по несколько переменных сразу, а не по одной — например, часто бывает, что у нас двудольный граф из переменных, в которых все переменные из одной доли связаны со всеми переменными из другой доли (ну или со многими), а между собой не связаны. В такой ситуации следует зафиксировать все переменные одной доли и просэмплировать все переменные в другой доле одновременно (это можно понимать буквально — поскольку при такой структуре все переменные одной доли условно независимы при условии другой, их можно сэмплировать независимо и параллельно), потом зафиксировать все переменные второй доли и так далее.

    Slice sampling

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

    Slice sampling, в его самой простой форме, равномерно выбирается из-под кривой [math]f(x)[/math] без необходимости отбрасывать какие-либо точки следующими действиями:

    • Выберите начальное значение [math]x_[/math] , для которого [math]f(x_)\gt 0[/math]
    • Выберите значение [math]y[/math] равномерно между [math]0[/math] и [math]f(x_)[/math]
    • Проведите горизонтальную линию через кривую в этой координате [math]y[/math]
    • Выберите точку [math](x, y)[/math] на отрезке в пределах кривой
    • Повторите с шага [math]2[/math] , используя новое значение [math]x[/math]

    Суть здесь заключается в том, что один из способов равномерной выборки точки из произвольной кривой — это сначала нарисовать тонкие горизонтальные срезы одинаковой высоты по всей кривой. Затем мы можем сэмплировать точку внутри кривой путем случайного выбора среза, который находится в точке или ниже кривой в позиции [math]x[/math] на предыдущей итерации, а затем случайным образом выбрать позицию [math]x[/math] где-нибудь вдоль среза. Используя позицию [math]x[/math] из предыдущей итерации алгоритма, в долгосрочной перспективе мы выбираем срезы с вероятностями, пропорциональными длине их сегментов в пределах кривой. Самая сложная часть этого алгоритма — это поиск границ горизонтального среза, который включает в себя инвертирование функции, описывающей распределение, из которого производится выборка. Это особенно проблематично для мультимодальных распределений, где срез может состоять из нескольких прерывистых частей. Часто можно использовать форму выборки отклонения, чтобы преодолеть это, когда мы производим выборку из более крупного среза, который, как известно, включает в себя требуемый рассматриваемый срез, а затем отбрасываем точки за пределами желаемого среза. Этот алгоритм можно использовать для выборки из области под любой кривой, независимо от того, интегрируется ли функция в [math]1[/math] . Фактически, масштабирование функции по константе не влияет на выборочные [math]x[/math] —позиции. Это означает, что алгоритм может использоваться для выборки из распределения, функция плотности вероятности которого известна только с точностью до константы.

    Комбинирование

    • SMOTE [math]+[/math] Tomek links [8] — сначала выполняет передискретизацию с использованием SMOTE, а потом субдискретизацию используя Tomek Links.
    • SMOTE [math]+[/math] ENN [9] — последовательно использует SMOTE и Edited Nearest Neighbours.

    Ансамбль сбалансированных наборов

    • Easy Ensemble classifier [10] — независимые классификаторы обучаются на случайных подвыборках, из которых постепенно удаляются правильно классифицирующиеся примеры мажоритарных классов.
    • Balanced Random Forest [11] — в отличие от классического случайного леса, может работать на несбалансированных данных.
    • Balanced Bagging [12] — в отличие от классического бэггинга, имеет дополнительный шаг субдискретизации обучающей подвыборки.

    Реализации

    Imbalanced-learn — набор инструментов с открытым исходным кодом на Python, целью которого является предоставление широкого спектра методов для решения проблемы несбалансированного набора данных. На рис. [math]7[/math] представлена таблица реализованных в библиотеке методов.

    Пример кода для передискретизации набора данных с использованием SMOTE:

    from sklearn.datasets import make_classification from sklearn.decomposition import PCA from imblearn.oversampling import SMOTE # Создание датасета X, y = makeclassification (n_classes=2, weights =[0.1, 0.9], n_features=20, n_samples=5000) Применение SMOTE over-sampling sm = SMOTE(ratio=’auto’, kind=’regular’) X_resampled , y_resampled=sm.fit_sample(X, y)

    Рис. [math]7[/math] . Методы imbalanced-learn

    См. также

    • Метрический классификатор и метод ближайших соседей
    • Байесовская классификация
    • Активное обучение
    • Виды ансамблей

    Примечания

    1. ↑Sampling (statistics)
    2. ↑Show-Jane Yen, Yue-Shi Lee,Cluster-based under-sampling approaches for imbalanced data distributions, Expert Systems with Applications, Volume 36, Issue 3, Part 1, 2009, Pages 5718-5727, ISSN 0957-4174
    3. ↑ I. Mani, J. Zhang. “kNN approach to unbalanced data distributions: A case study involving information extraction,” In Proceedings of the Workshop on Learning from Imbalanced Data Sets, pp. 1-7, 2003.
    4. ↑ D. Wilson, “Asymptotic Properties of Nearest Neighbor Rules Using Edited Data,” IEEE Transactions on Systems, Man, and Cybernetrics, vol. 2(3), pp. 408-421, 1972.
    5. ↑ N. V. Chawla, K. W. Bowyer, L. O. Hall, W. P. Kegelmeyer, “SMOTE: Synthetic minority over-sampling technique,” Journal of Artificial Intelligence Research, vol. 16, pp. 321-357, 2002.
    6. ↑ H. Han, W.-Y. Wang, B.-H. Mao, “Borderline-SMOTE: A new over-sampling method in imbalanced data sets learning,” In Proceedings of the 1st International Conference on Intelligent Computing, pp. 878-887, 2005.
    7. ↑ H. M. Nguyen, E. W. Cooper, K. Kamei, “Borderline over-sampling for imbalanced data classification,” In Proceedings of the 5th International Workshop on computational Intelligence and Applications, pp. 24-29, 2009.
    8. ↑ G. E. A. P. A. Batista, A. L. C. Bazzan, M. C. Monard, “Balancing training data for automated annotation of keywords: A case study,” In Proceedings of the 2nd Brazilian Workshop on Bioinformatics, pp. 10-18, 2003.
    9. ↑ G. E. A. P. A. Batista, R. C. Prati, M. C. Monard, “A study of the behavior of several methods for balancing machine learning training data,” ACM Sigkdd Explorations Newsletter, vol. 6(1), pp. 20-29, 2004.
    10. ↑ X.-Y. Liu, J. Wu and Z.-H. Zhou, “Exploratory undersampling for class-imbalance learning,” IEEE Transactions on Systems, Man, and Cybernetics, vol. 39(2), pp. 539-550, 2009.
    11. ↑ C. Chao, A. Liaw, and L. Breiman. «Using random forest to learn imbalanced data.» University of California, Berkeley 110 (2004): 1-12.
    12. ↑ Hido, Shohei & Kashima, Hisashi. (2008). Roughly Balanced Bagging for Imbalanced Data. 143-152. 10.1137/1.9781611972788.13.

    Источники информации

    1. Oversampling and undersampling in data analysis
    2. Различные стратегии сэмплинга в условиях несбалансированности классов
    3. Lemaître, G. Nogueira, F. Aridas, Ch.K. (2017) Imbalanced-learn: A Python Toolbox to Tackle the Curse of Imbalanced Datasets in Machine Learning, Journal of Machine Learning Research, vol. 18, no. 17, 2017, pp. 1-5.
    • Машинное обучение
    • Классификация и регрессия

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *