xbe.at

Machine learning / Feature engineering and preprocessing

Solve imbalanced datasets in Python

4 min read, 15 sections

Contents
  1. Introduction to Imbalanced Datasets
  2. Why Imbalanced Datasets are a Problem
  3. Resampling Techniques
  4. Oversampling Techniques
  5. Undersampling Techniques
  6. Evaluation Metrics for Imbalanced Datasets
  7. Class Weight Adjustment
  8. Ensemble Methods
  9. Cost-Sensitive Learning
  10. Data Augmentation
  11. One-Class Classification
  12. Anomaly Detection
  13. Domain-Specific Approaches
  14. Best Practices and Conclusion
  15. Meta:

Introduction to Imbalanced Datasets

Imbalanced datasets occur when the distribution of classes in a dataset is heavily skewed, with one or more classes being significantly underrepresented compared to others. This can lead to biased models that perform poorly on minority classes.

Why Imbalanced Datasets are a Problem

Machine learning algorithms are often designed to optimize overall accuracy, which can lead to models that perform well on majority classes but poorly on minority classes. This can be problematic in domains like fraud detection, where accurately identifying rare cases is crucial.

Resampling Techniques

One of the most common approaches to handling imbalanced datasets is resampling, which involves either oversampling the minority class or undersampling the majority class to create a more balanced distribution.

Code:

from sklearn.utils import resample

# Separate majority and minority classes
majority = data[data.target==0]
minority = data[data.target==1]

# Undersample majority class
majority_downsampled = resample(majority,
                                 replace=False,
                                 n_samples=len(minority),
                                 random_state=123)

# Combine minority and downsampled majority
resampled_data = pd.concat([majority_downsampled, minority])

Source: scikit-learn documentation

Oversampling Techniques

Oversampling involves creating new instances of the minority class by duplicating existing instances or generating synthetic instances using techniques like SMOTE (Synthetic Minority Over-sampling Technique).

Code:

from imblearn.over_sampling import SMOTE

smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)

Source: imbalanced-learn documentation

Undersampling Techniques

Undersampling involves removing instances from the majority class to create a more balanced distribution. This can be done randomly or using techniques like NearMiss, which selects majority class instances that are closest to the minority class instances.

Code:

from imblearn.under_sampling import NearMiss

nr = NearMiss()
X_resampled, y_resampled = nr.fit_resample(X, y)

Source: imbalanced-learn documentation

Evaluation Metrics for Imbalanced Datasets

Traditional evaluation metrics like accuracy can be misleading for imbalanced datasets. Instead, metrics like precision, recall, F1-score, and area under the ROC curve (AUC-ROC) are more appropriate.

Code:

from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score

precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
auc = roc_auc_score(y_true, y_pred)

Source: scikit-learn documentation

Class Weight Adjustment

Many machine learning algorithms allow you to adjust the class weights to give more importance to the minority class during training. This can help improve performance on the minority class.

Code:

from sklearn.linear_model import LogisticRegression

# Compute class weights
class_weights = {0: 1, 1: len(data) / (2 * len(minority))}

# Train model with class weights
model = LogisticRegression(class_weight=class_weights)
model.fit(X, y)

Source: scikit-learn documentation

Ensemble Methods

Ensemble methods like bagging, boosting, and stacking can be effective for imbalanced datasets. These methods combine multiple models, which can help capture the minority class better.

Code:

from imblearn.ensemble import BalancedBaggingClassifier

bbc = BalancedBaggingClassifier(random_state=42)
bbc.fit(X, y)

Source: imbalanced-learn documentation

Cost-Sensitive Learning

Cost-sensitive learning involves assigning different misclassification costs to different classes, which can help prioritize the correct classification of the minority class.

Code:

from sklearn.linear_model import LogisticRegression

# Define class weights
class_weights = {0: 1, 1: 10}  # Higher weight for minority class

# Train model with class weights
model = LogisticRegression(class_weight=class_weights)
model.fit(X, y)

Source: scikit-learn documentation

Data Augmentation

Data augmentation techniques like image transformations (for image data) or text augmentation (for text data) can be used to generate synthetic instances of the minority class.

Code:

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# Generate augmented data
augmented_data = datagen.flow_from_directory('data/minority_class', batch_size=32)

Source: Keras documentation

One-Class Classification

One-class classification is an approach where you train a model to recognize the majority class, and then treat any instances that deviate from this as potential minority class instances.

Code:

from sklearn.svm import OneClassSVM

model = OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
model.fit(X_majority)

# Predict minority class instances
y_pred = model.predict(X)
y_pred[y_pred == -1] = 1  # Assign minority class label

Source: scikit-learn documentation

Anomaly Detection

Anomaly detection techniques can be used to identify instances of the minority class as anomalies or outliers in the data.

Code:

from pyod.models.knn import KNNDetector

detector = KNNDetector()
detector.fit(X)

# Predict anomaly scores
anomaly_scores = detector.predict_scores(X)

# Assign minority class label to anomalies
y_pred = np.zeros(len(anomaly_scores))
y_pred[anomaly_scores > threshold] = 1

Source: PyOD documentation

Domain-Specific Approaches

Depending on the domain and type of data, there may be specific techniques or algorithms tailored for handling imbalanced datasets. For example, in natural language processing, techniques like oversampling with text augmentation or transfer learning can be effective.

Best Practices and Conclusion

When dealing with imbalanced datasets, it's important to try multiple techniques and evaluate their performance using appropriate metrics. Additionally, domain knowledge and problem-specific considerations should guide the choice of techniques. Imbalanced datasets are a common challenge, but with the right approaches, it's possible to build accurate and reliable models.

Note: The source code examples provided in this slideshow are meant to be illustrative and may require additional modifications or setup for your specific use case. Additionally, some slides may require more detailed explanations or additional examples based on the level of the audience.

Meta:

Here's a title, description, and hashtags for a TikTok video with an institutional tone, focused on explaining how to handle imbalanced datasets in Python:

Solving Imbalanced Datasets with Python

Imbalanced datasets pose a significant challenge in machine learning, as traditional algorithms often struggle to accurately classify minority classes. In this educational TikTok series, we'll explore various techniques to tackle imbalanced datasets using Python.

From resampling methods like oversampling and undersampling to ensemble techniques and cost-sensitive learning, we'll cover practical solutions to improve your model's performance on minority classes. Join us as we dive into actionable code examples and best practices for handling imbalanced datasets, empowering you to build more robust and equitable models.

#MachineLearning #ImbalancedDatasets #Python #DataScience #CodeTutorials #TechEducation #AI #ModelPerformance #MinorityClassPrediction #EthicalAI

More in Feature engineering and preprocessing

  1. Splitting Arrays for Machine Learning Model Training12 min

    Array splitting is a crucial technique in machine learning, particularly for preparing data for model training. It involves dividing a large dataset into...

  2. Outlier Detection and Removal in Python12 min

    Outliers are data points that significantly deviate from the normal pattern of a dataset. Detecting and handling outliers is crucial for maintaining data...

  3. Strategies for Handling Imbalanced Datasets14 min

    The fundamental challenge in imbalanced datasets occurs when one class significantly outnumbers others, leading to biased model predictions. This slide...

  4. One-Hot Encoding in Python for Machine Learning6 min

    One-Hot Encoding is a technique used in machine learning to represent categorical data as binary vectors. It is particularly useful when working with...

  5. Target Encoding for Categorical Variables in Machine Learning6 min

    Target encoding represents a sophisticated approach to handling categorical variables by replacing category levels with their corresponding target mean...

  6. Normalizing and Feature Extraction of 3D Point Clouds10 min

    Point clouds are 3D representations of objects or environments, consisting of numerous points in space. Normalizing these point clouds and extracting...