Автор оригинала: Pankaj Kumar.
Сегодня я охватываю несбалансированные классификационные проблемы в машинном обучении с использованием увеличения данных Smote и Adasyn.
Основы классификации в машинном обучении
Классификация Может быть определен как процесс прогнозирования класса или категории от наблюдаемых значений или точек данных.
Идентификация спама в электронных письмах может быть примером задачи классификации. Там могут быть только два типа производительности, «спам» и «нет-спам»; Таким образом, это классификация двоичного вида.
Другие примеры:
- Обнаружение мошенничества.
- Прогноз претензий
- Прогноз по умолчанию.
- Прогноз оттуды.
- Обнаружение спама.
- Обнаружение аномалии.
- Обнаружение выброса.
- Обнаружения вторжений
- Прогноз преобразования
На самом деле, он используется для прогнозирования стихийных бедствий метеорологических департаментов и столкновениями галактики астрономами.
Имасштабные наборы данных и его эффекты
Сложность борьбы с дисбалансированными наборами данных заключается в том, что класс меньшинств будет упущен большинством подходов на машине, хотя он обычно является наиболее значимым выходом в классе меньшинств.
Скажи, что ваш набор данных экспериментирован.
Вы создаете модель для классификации и автоматически получаете на 90 процентов точности. Вы переплетены.
Но когда вы копаете немного дальше и обнаружили, что 90% материала принадлежат одному классу. Когда вы обнаружили, что ваши данные имели несбалансированные группы, вы чувствовали себя очень разочарованы, и что все фантастические результаты, которые вы верили, что вы получали, оказалось, что ложь. 🙁.
Как узнать, когда данные невыбалансированы
Двусбалансированные данные Относится к обеспомочению с проблемами классификации, в которых группы не являются одинаковыми распределенными.
Например, с 100 экземплярами (строками) у вас может быть проблема 2 класса (двоичной) классификации. Class-1 классифицируется в общей сложности 80 экземпляров, а класс-2 классифицируется для оставшихся 20 событий.
Это дисбалансский набор данных, с 80:20 или более сжатым соотношением 4: 1 класса-1 к примерам класса-2.
Техника для решения с несбалансированными данными
Важно посмотреть в техниках, таких как Smote и Адасин , которые генерируют новые данные и уравновешивают классы набора данных.
Другие методы, которые не так хороши, включают в себя: получить больше данных, попробуйте повторить данные, попробуйте изменять метрику оценки и т. Д.
Что такое Smote?
Smote коротка для Техника перемотания из синтетической меньшинства Отказ
Если у вас есть 100 рядов данных, и вам нужно выбрать 10 из них, это довольно легко. Вы просто случайным образом образец 10 элементов из набора данных. Это называется Недостаток Отказ Противоположное известно как перевезти Отказ
Поэтому, если у вас есть проблема с двоичной классификацией с 100 строками данных в одном классе и 10 строках данных в другом классе, вы могли бы просто дублировать примеры из класса меньшинств в наборе тренировочного набора, прежде чем удерживать модель.
Это может сбалансировать распределение класса, но не предоставляет модели любыми дополнительными деталями.
Вместо этого мы используем Увеличение данных , который может быть очень мощным. Синтез новых примеров из класса меньшинств является прогрессом по поводу репликации примеров из класса меньшинств.
Перемотание с Smote.
Мы будем использовать Sklearn Библиотека для этой цели. В этом случае мы создаем пользовательский набор данных с 5000 образцов.
from imblearn.over_sampling import SMOTE from sklearn.datasets import make_classification import matplotlib.pyplot as plt
Теперь мы используем функцию make_classification:
X, y = make_classification(n_samples=5000, n_features=2, n_redundant=0, weights=[.99], n_informative=2, n_clusters_per_class=1)
Мой оказался как:
Построение данных
Мы будем использовать Матплотлиб :
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y, s=25, edgecolor='k')
Очевидно, что если мы поместим модель к этому набору данных, то она будет сильно предвзято предсказывать больший набор данных.
Так что балансировать это, мы будем использовать Smote:
Теперь мы видим, что набор данных был сбалансирован:
Что такое Адасин?
Коротко для Адаптивный подход синтетического отбора проб , обобщение алгоритма Smote.
Создавая виртуальные экземпляры для этого, этот алгоритм также пытается перераспределить класс меньшинств.
Но различие вот в том, что он учитывает распределение плотности, которое определяет количество синтетических экземпляров, полученных для образцов, которые трудно понять.
Из-за этого он помогает корректировать ограничения решений, адаптивно в зависимости от сложных образцов.
Передисредство с Адасином
Давайте попробуем построить тот же набор данных с Адасином.
from imblearn.over_sampling import ADASYN ada = ADASYN() x_ada , Y_ada = ada.fit_resample(X_,y_) plt.scatter(x_ada[:, 0], x_ada[:, 1], marker='o', c=Y_ada, s=25, edgecolor='k')
Что значительно в обоих участках?
Если вы внимательно соблюдаете графики, вы обнаружите, что Adasyn дает нам гораздо лучшую деталь, в то время как Smote имеет тенденцию покрывать границу, присоединившись к точкам, если они близки друг к другу.
Пытаясь улыбнуть на реальном наборе данных
Вы хотите увидеть это в действии на реальном наборе данных? Давайте возьмем этот: https://www.kaggle.com/clmentbisaillon/fake-and-real-news-dataset.
Определенно подробно описываем аналитику текстовых данных позже, но это просто чтобы показать, что, хотя мы узнали о нем только сгенерированных простых участков, оно имеет гораздо более широкий спектр приложений.
Так что это наши данные: (мы добавили этикетки на основе тех, которые даны на Kaggle))
Вы можете, очевидно, видно, что данные очень небалансятся в 1:10 для поддельных новостей. В таких случаях все алгоритмы прогнозируют 100% статей как поддельных, максимизировать его точность. Но это определенно не так.
Поэтому нам нужно смутить сбалансировать набор данных. Сначала мы изменим текст в численные значения по векторизатору TFIDF (что мы узнаем позже):
Соблюдайте тесно среди генерируемых наборов данных, и они очень похожи на фактические данные, и в настоящее время набор данных сбалансирован в соотношении 1: 1, поэтому нет смещения для алгоритмов классификации:
И это за сегодня. Продолжайте возвращаться, и у нас намного больше тем в магазине! Конечно, если вы ничего не пропустили, вы найдете все код здесь:
https://github.com/arkaprabha-majumdar/smote-for-data-numbers-and-text