Еще один интересный метод недостаточной выборки для несбалансированного набора данных.

Привет! Мы снова, как и обещали, с интересной темой из области науки о данных.

Сегодня мы рассмотрим комбинацию методов Keep и Delete для недостаточной выборки несбалансированных наборов данных.

Односторонний выбор (OSS) — это еще один метод недостаточной выборки, сочетающий в себе правила Tomek Links и Condensed (CNN).

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

Этот метод был впервые предложен Мирославом Кубатом и Стэном Матвином в их статье 1997 года под названием Преодоление проклятия несбалансированных тренировочных наборов: односторонний выбор.

#One-Sided Selection
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.under_sampling import OneSidedSelection
from matplotlib import pyplot
from numpy import where
#define dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=1)
#summarize class distribution
counter = Counter(y)
print(counter)
#define the undersampling method
undersample = OneSidedSelection(n_neighbors=1, n_seeds_S=200)
#transform the dataset
X, y = undersample.fit_resample(X, y)
#summarize the new class distribution
counter = Counter(y)
print(counter)
#plot
for label, _ in counter.items():
row_ix = where(y == label)[0]
pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()

вот и все!

Теперь давайте проверим, что такое NCR

Правило NCR расшифровывается как Neighborhood Cleaning. Это метод недостаточной выборки, который сочетает в себе как CNN для удаления избыточных данных, так и ENN для удаления зашумленных или неоднозначных данных.

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

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

#neighborhood cleaning rule
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.under_sampling import NeighbourhoodCleaningRule
from matplotlib import pyplot
from numpy import where
#define dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=1)
#summarize class distribution
counter = Counter(y)
print(counter)
#define the undersampling method
undersample = NeighbourhoodCleaningRule(n_neighbors=3, threshold_cleaning=0.5)
#transform the dataset
X, y = undersample.fit_resample(X, y)
#summarize the new class distribution
counter = Counter(y)
print(counter)
#scatter plot of examples by class label
for label, _ in counter.items():
  row_ix = where(y == label)[0]
  pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()

вот и все.

Надеюсь, вам понравилось. Если вы хотите узнать больше подробностей, вы можете поискать в Google OSS и NCR — методы недостаточной выборки или посетить сайт, посвященный машинному обучению.

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

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

Некоторые из моих альтернативных интернет-присутствий Facebook, Instagram, Udemy, Blogger, Issuu и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Хорошего дня.