302
правки
Изменения
Нет описания правки
* '''Передискретизации''' (англ. ''over-sampling'') {{---}} увеличение количество примеров миноритарного класса.
* '''Комбинированние''' (англ. ''сombining over- and under-sampling'') {{---}} последовательное применение субдискретизации и передискретизации.
* '''Ансамбль сбалансированных наборов''' (англ. ''ensemble balanced sets'') {{---}} ансамбли использование встроенных метода сэмплирования в процессе построения ансамблей классификаторов, использующие сэмплирование внутри.
Также все методы можно разделить на две группы: случайные (недетерминированные) и специальные (детерминированные).
== Примеры алгоритмов ==
[[Файл:Random_undersampling.png|thumb|right|upright=1.76|Рис. <math>1</math>. Случайное удаление примеров мажоритарного класса]]
=== Cубдискретизация (удаление примеров мажоритарного класса) ===
==== '''Случайное удаление примеров мажоритарного класса''' (англ. ''Random Undersampling'') ====
На рис. <math>1</math> изображены примеры некоторого набора данных в двумерном пространстве признаков до и после использования алгоритма.
==== '''Поиск связей Томека''' (англ. ''Tomek Links'') ====
[[Файл:Tomek_links.png|thumb|right|upright=1.76|Рис. <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>2</math> визуально показан набор данных в двумерном пространстве признаков до и после применения стратегии поиска связей Томека.
==== '''Правило сосредоточенного ближайшего соседа''' (англ. ''Condensed Nearest Neighbor Rule'') ====
[[Файл:Condensed_nearest_neighbor_rule.png|thumb|right|upright=1.76|Рис. <math>3</math>. Удаление примеров мажоритарного класса правилом сосредоточенного ближайшего соседа]]
Пусть <math>L</math> – исходный набор данных. Из него выбираются все миноритарные примеры и (случайным образом) один мажоритарный. Обозначим это множество как <math>S</math>. Все примеры из <math>L</math> классифицируются по правилу одного ближайшего соседа. Записи, получившие ошибочную метку, добавляются во множество <math>S</math> (рис. <math>3</math>).
Таким образом, мы будем учить классификатор находить отличие между похожими примерами, но принадлежащими к разным классам.
==== '''Дублирование примеров миноритарного класса''' (англ. ''Oversampling'') ====
Самый простой метод – это дублирование примеров миноритарного класса. В зависимости от того, какое соотношение классов необходимо, выбирается количество случайных записей для дублирования.
[[Файл:Smote.png|thumb|right|upright=1.2|Рис. <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{d}</math>. Вектор признаков нового примера вычисляется путем сложения <math>X_a</math> и <math>\hat{d}</math>. Алгоритм ''SMOTE'' позволяет задавать количество записей, которое необходимо искусственно сгенерировать. Степень сходства примеров <math>a</math> и <math>b</math> можно регулировать путем изменения числа ближайших соседей <math>k</math>. На рис. <math>4</math> схематично изображено то, как в двумерном пространстве признаков могут располагаться искусственно сгенерированные примеры.
[[Файл:Smote_overgeneralization.png|thumb|right|upright=1.72|Рис. <math>5</math>. Негативное влияние алгоритма SMOTE]]
==== '''ASMO''' (англ. ''Adaptive Synthetic Minority Oversampling'') ====
[[Файл:Asmo.png|thumb|right|upright=1.72|Рис. <math>6</math>. Основная идея алгоритма ASMO]]
Алгоритм ''SMOTE'' имеет недостаток в том, что «вслепую» увеличивает плотность примерами в области слабо представленного класса (рис. <math>5</math>). В случае, если миноритарные примеры равномерно распределены среди мажоритарных и имеют низкую плотность, алгоритм SMOTE только сильнее перемешает классы.
В качестве решения данной проблемы был предложен алгоритм адаптивного искусственного увеличения числа примеров миноритарного класса ''ASMO'':
# Если для каждого <math>i</math>-ого примера миноритарного класса из <math>k</math> ближайших соседей <math>g, (g≤k)</math> принадлежит к мажоритарному, то набор данных считается «рассеянным». В этом случае используют алгоритм ASMO, иначе применяют SMOTE (как правило, <math>g</math> задают равным <math>20</math>).
# Используя только примеры миноритарного класса, выделить несколько кластеров (например, алгоритмом [[K-средних|<tex>\mathrm{k}</tex>-средних]]k-means).
# Сгенерировать искусственные записи в пределах отдельных кластеров на основе всех классов. Для каждого примера миноритарного класса находят <math>m</math> ближайших соседей, и на основе них (также как в ''SMOTE'') создаются новые записи.
Такая модификация алгоритма ''SMOTE'' делает его более адаптивным к различным наборам данных с несбалансированными классами. Общее представление идеи алгоритма показано на рис. <math>6</math>.
== Реализации ==
[https://github.com/scikit-learn-contrib/imbalanced-learn Imbalanced-learn] {{---}} набор инструментов с открытым исходным кодом на Python, целью которого является предоставление широкого спектра методов для решения проблемы несбалансированного набора данных. На рис. <math>7</math> представлена таблица реализованных в библиотеке методов.
Пример кода для передискретизации набора данных с использованием ''SMOTE'':
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
from imblearn.oversampling import SMOTE
<font color="green"># Создание датасета</font>
X, y = makeclassification (n_classes=2, weights =[0.1, 0.9],
n_features=20, n_samples=5000)
<font color="green">Применение SMOTE over-sampling</font>
sm = SMOTE(ratio=’auto’, kind=’regular’)
X_resampled , y_resampled=sm.fit_sample(X, y)
== См. также ==
*[[%%%%%%%%%%%%%%%%%%%%%%%%5Метрический_классификатор_и_метод_ближайших_соседей]]*[[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Байесовская_классификация]]*[[Активное_обучение]]*[[Виды_ансамблей]]
== Примечания ==
<references/>
==Источники информации==
#[https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis#Undersampling_techniques_for_classification_problems Oversampling and undersampling in data analysis]
#[https://basegroup.ru/community/articles/imbalance-datasets Различные стратегии сэмплинга в условиях несбалансированности классов]
# Lemaître, G. Nogueira, F. Aridas, Ch.K. (2017) [http://www.jmlr.org/papers/volume18/16-365/16-365.pdf 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.
[[Категория: Машинное обучение]]
[[Категория: Классификация и регрессия]]