Еще один интересный метод недостаточной выборки для несбалансированного набора данных.
Привет! Мы снова, как и обещали, с интересной темой из области науки о данных.
Сегодня мы рассмотрим комбинацию методов 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