
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