Работа с несбалансированными наборами данных — распространенная проблема в машинном обучении, когда количество выборок в одном классе значительно превышает количество других. Недостаточная выборка — популярный метод, используемый для решения этой проблемы, при котором выборки большинства классов уменьшаются, чтобы сбалансировать набор данных. В этой статье мы рассмотрим различные методы недостаточной выборки, доступные в Scikit-Learn, популярной библиотеке Python для машинного обучения. Мы предоставим примеры кода, чтобы продемонстрировать каждый метод и объяснить их плюсы и минусы.
- Случайная недостаточная выборка.
Случайная недостаточная выборка предполагает случайный выбор подмножества выборок большинства классов. Этот метод направлен на поддержание общего распределения класса меньшинства при одновременном сокращении количества выборок класса большинства. Фрагмент кода ниже демонстрирует, как выполнить случайную недостаточную выборку с помощью Scikit-Learn:
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from imblearn.under_sampling import RandomUnderSampler
# Generate imbalanced dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, weights=[0.9, 0.1])
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Apply random undersampling
rus = RandomUnderSampler(random_state=42)
X_train_res, y_train_res = rus.fit_resample(X_train, y_train)
# Check the class distribution after undersampling
print("Class distribution after undersampling:", np.bincount(y_train_res))
- Заниженная выборка NearMiss:
NearMiss — это семейство методов недостаточной выборки, которые отбирают образцы класса большинства на основе их близости к образцам класса меньшинства. Идея состоит в том, чтобы сохранить образцы, наиболее близкие к классу меньшинства, что сделает набор данных более сбалансированным. Вот пример использования NearMiss в Scikit-Learn:
from imblearn.under_sampling import NearMiss
# Apply NearMiss undersampling
nm = NearMiss(version=1)
X_train_res, y_train_res = nm.fit_resample(X_train, y_train)
# Check the class distribution after undersampling
print("Class distribution after undersampling:", np.bincount(y_train_res))
- Недостаточная выборка центроидов кластера.
Центроиды кластера — это метод недостаточной выборки, который отбирает выборки большинства классов путем их кластеризации и выбора центроидов каждого кластера. Этот метод помогает сохранить общее распределение большинства классов. Вот как вы можете использовать центроиды кластера в Scikit-Learn:
from imblearn.under_sampling import ClusterCentroids
# Apply Cluster Centroids undersampling
cc = ClusterCentroids(random_state=42)
X_train_res, y_train_res = cc.fit_resample(X_train, y_train)
# Check the class distribution after undersampling
print("Class distribution after undersampling:", np.bincount(y_train_res))
- Недостаточная выборка ссылок Tomek:
Ссылки Tomek — это пары семплов из разных классов, близких друг к другу. При недостаточной выборке на основе Tomek Links удаляются выборки большинства классов, которые формируют эти ссылки, что делает набор данных более разделимым. Вот пример использования Tomek Links в Scikit-Learn:
from imblearn.under_sampling import TomekLinks
# Apply Tomek Links undersampling
tl = TomekLinks()
X_train_res, y_train_res = tl.fit_resample(X_train, y_train)
# Check the class distribution after undersampling
print("Class distribution after undersampling:", np.bincount(y_train_res))
Недостаточная выборка – ценный метод устранения несбалансированных наборов данных в машинном обучении. В этой статье мы исследовали несколько методов недостаточной выборки, доступных в Scikit-Learn, включая случайную недостаточную выборку, NearMiss, Cluster Centroids и Tomek Links. Каждый метод предлагает уникальный подход к балансировке набора данных, и выбор зависит от конкретных характеристик данных. Используя эти методы недостаточной выборки, вы можете повысить производительность своих моделей классификации на несбалансированных наборах данных.