Page cover

Behandlung von Klassenungleichgewichten

Klassenungleichgewichte treten auf, wenn die Anzahl der Beobachtungen in den verschiedenen Klassen eines Klassifikationsproblems stark variieren. Dies kann zu Verzerrungen führen, da der Algorithmus dazu neigen kann, Klassen mit vielen Beobachtungen besser zu lernen und die selteneren Klassen zu vernachlässigen.

  • Upsampling: Beim Upsampling werden Beobachtungen der seltenen Klasse dupliziert oder synthetische Beobachtungen generiert, um das Verhältnis zwischen den Klassen auszugleichen.

    import sklearn
    from sklearn.datasets import make_classification
    import pandas as pd
    import imblearn
    from imblearn.over_sampling import SMOTE
    X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, weights=[0.1, 0.9], random_state=42)
    smote = SMOTE(random_state=42)
    X_res, y_res = smote.fit_resample(X, y)
    # Konvertierung der resamplten Merkmalsdaten X_res in einen Pandas DataFrame df_res
    df_res = pd.DataFrame(X_res)
    
    # Hinzufügen der Zielvariablen y_res als neue Spalte 'target' im DataFrame df_res
    df_res['target'] = y_res

    Mehr erfahren: machinelearningmastery/SMOTE

  • Downsampling: Beim Downsampling werden Beobachtungen der häufigeren Klassen zufällig entfernt, um das Verhältnis zwischen den Klassen auszugleichen.

    from sklearn.datasets import load_iris
    from imblearn.under_sampling import RandomUnderSampler
    from collections import Counter
    
    # Downsampling der häufigeren Klasse
    rus = RandomUnderSampler(random_state=42)
    X_resampled, y_resampled = rus.fit_resample(X, y)

    Mehr erfahren: IBM/What is downsampling?

  • Gewichtung von Klassen: Einige ML-Algorithmen ermöglichen die Gewichtung von Klassen, wodurch die Fehler der seltenen Klasse höher gewichtet werden können, um ihre Bedeutung zu erhöhen. Diese Techniken können je nach Datensatz und spezifischem Problem angewendet werden, um eine optimale Leistung zu erzielen.

    from sklearn.datasets import load_iris
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    
    # Aufteilen in Trainings- und Testdaten
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # RandomForest-Modell mit Klassengewichtung
    clf = RandomForestClassifier(class_weight='balanced', random_state=42)
    clf.fit(X_train, y_train)
    
    # Vorhersage und Auswertung
    y_pred = clf.predict(X_test)

    Mehr erfahren: Medium/Improving Class Imbalance with Class Weights in Machine Learning, imbalanced-learn/BalancedRandomForestClassifier

Last updated