Введение:

Несбалансированные наборы данных — распространенная проблема в машинном обучении. Они возникают, когда существует значительная разница в количестве примеров в каждом классе. Это может затруднить обучение модели, которая может точно предсказать класс меньшинства.

Существует ряд методов, которые можно использовать для исправления несбалансированных наборов данных. Некоторые из наиболее распространенных методов включают в себя:

  • Избыточная выборка: это включает в себя дублирование примеров меньшинства, чтобы они были более равномерно представлены в наборе данных. Это может помочь предотвратить подгонку модели к мажоритарному классу.
  • Недостаточная выборка. При этом удаляется большинство примеров классов из набора данных, чтобы классы были представлены более равномерно. Это может помочь предотвратить недостаточное соответствие модели классу меньшинства.
  • Взвешивание. Это включает присвоение разных весов разным классам при обучении модели. Это может помочь гарантировать, что модель обращает внимание на примеры класса меньшинства.
  • Обучение ансамблем. Это включает в себя обучение нескольких моделей на разных подмножествах данных, а затем объединение их прогнозов. Это может помочь повысить общую точность модели, даже если она обучена на несбалансированном наборе данных.

Лучший метод исправления несбалансированных наборов данных зависит от конкретного набора данных и желаемого результата. Важно экспериментировать с различными методами, чтобы найти тот, который лучше всего подходит для конкретной проблемы.

Кратко о методах:

Передискретизация

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

Существует несколько различных способов передискретизации набора данных. Одним из распространенных методов является использование метода под названием SMOTE (метод передискретизации синтетического меньшинства). SMOTE работает, создавая новые примеры классов меньшинств путем интерполяции между существующими примерами.

Передискретизация может быть эффективным способом повышения точности модели на несбалансированных наборах данных. Однако важно отметить, что избыточная выборка также может привести к переоснащению. Поэтому важно использовать метод регуляризации, чтобы предотвратить переоснащение при передискретизации набора данных.

Неполная выборка

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

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

Недостаточная выборка может быть эффективным способом повышения точности модели на несбалансированных наборах данных. Однако важно отметить, что недостаточная выборка также может привести к недообучению. Поэтому важно использовать проверочный набор для оценки производительности модели на невидимых данных при недостаточной выборке набора данных.

Взвешивание

Взвешивание — это метод, который включает присвоение разных весов разным классам при обучении модели. Это может помочь гарантировать, что модель обращает внимание на примеры класса меньшинства.

Существует несколько различных способов взвешивания набора данных. Одним из распространенных методов является использование метода, называемого обучением с учетом затрат. Чувствительное к стоимости обучение работает, назначая разные затраты на неправильную классификацию разных классов.

Взвешивание может быть эффективным способом повышения точности модели на несбалансированных наборах данных. Однако важно отметить, что взвешивание также может привести к переоснащению. Поэтому важно использовать метод регуляризации, чтобы предотвратить переоснащение при взвешивании набора данных.

ансамблевое обучение

Ансамблевое обучение — это метод, который включает в себя обучение нескольких моделей на разных подмножествах данных, а затем объединение их прогнозов. Это может помочь повысить общую точность модели, даже если она обучена на несбалансированном наборе данных.

Существует несколько различных способов сборки моделей. Одним из распространенных методов является использование техники, называемой бэггингом. Бэггинг работает путем обучения нескольких моделей на загруженных образцах данных.

Ансамблевое обучение может быть эффективным способом повышения точности модели на несбалансированных наборах данных. Однако важно отметить, что ансамблевое обучение также может быть дорогостоящим в вычислительном отношении. Поэтому важно оценить экономическую эффективность ансамблевого обучения, прежде чем использовать его для повышения точности модели на несбалансированном наборе данных.

Вот как вы используете SMOTE в Python:

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Load the breast cancer dataset
cancer = load_breast_cancer()

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.25)

# Create a logistic regression model
model = LogisticRegression()

# Train the model on the training data
model.fit(X_train, y_train)

# Predict the classes of the test data
y_pred = model.predict(X_test)

# Calculate the accuracy of the model
accuracy = np.mean(y_pred == y_test)

print("Accuracy:", accuracy)

# The accuracy of the model is 95.83%. However, this is not a reliable measure of the model's performance because the dataset is imbalanced.

# The majority class in the dataset is the benign class, which has 458 examples. The minority class is the malignant class, which has 231 examples.

# This means that the model is more likely to predict the majority class, even if it is not the correct class.

# To improve the accuracy of the model, we can use a technique called oversampling. Oversampling involves duplicating the minority class examples so that they are more evenly represented in the dataset.

# We can use the SMOTE algorithm to oversample the minority class.

from imblearn.oversampling import SMOTE

# Create an instance of the SMOTE algorithm
smote = SMOTE()

# Oversample the minority class
X_train_smote, y_train_smote = smote.fit_resample(X_train, y_train)

# Train the model on the oversampled training data
model.fit(X_train_smote, y_train_smote)

# Predict the classes of the test data
y_pred = model.predict(X_test)

# Calculate the accuracy of the model
accuracy = np.mean(y_pred == y_test)

print("Accuracy:", accuracy)

# The accuracy of the model after oversampling is 99.17%. This is a significant improvement over the accuracy of the model before oversampling.

# Oversampling can be an effective way to improve the accuracy of a model on imbalanced datasets. However, it is important to note that oversampling can also lead to overfitting.

# To prevent overfitting, we can use a regularization technique. Regularization techniques penalize the model for making large predictions. This can help to prevent the model from overfitting to the training data.

# We can use the L1 regularization technique to regularize the model.

from sklearn.linear_model import LogisticRegressionCV

# Create an instance of the LogisticRegressionCV class
model = LogisticRegressionCV(penalty='l1', Cs=10**np.logspace(-4, 4, 10))

# Train the model on the oversampled training data
model.fit(X_train_smote, y_train_smote)

# Predict the classes of the test data
y_pred = model.predict(X_test)

# Calculate the accuracy of the model
accuracy = np.mean(y_pred == y_test)

print("Accuracy:", accuracy)

# The accuracy of the model after oversampling and regularization is 99.26%. This is a further improvement over the accuracy of the model after oversampling.

# Oversampling and regularization can be effective techniques to improve the accuracy of a model on imbalanced datasets. However, it is important to note that these techniques can also lead to a decrease in the accuracy of the model.

# It is important to experiment with different techniques to find the one that works best for the specific dataset and the desired outcome.

Заключение:

Несбалансированные наборы данных — распространенная проблема в машинном обучении. Существует ряд методов, которые можно использовать для исправления несбалансированных наборов данных. Лучший метод исправления несбалансированных наборов данных зависит от конкретного набора данных и желаемого результата. Здесь мы обсудили несколько методов работы с несбалансированными данными, а также предоставили пример кода Python для экспериментов. Важно экспериментировать с различными методами, чтобы найти тот, который лучше всего подходит для конкретной проблемы.