Sklearn-Datenvorverarbeitung

Datenvorverarbeitung ist ein entscheidender Schritt in Projekten des maschinellen Lernens; sie wirkt sich direkt auf die Trainingseffektivität und die endgültige Leistung des Modells aus.

Beim Erstellen von Modellen des maschinellen Lernens ist die Datenvorverarbeitung ein entscheidender Schritt; sie hilft uns, Rohdaten zu bereinigen und umzuwandeln, um die beste Eingabe für Modelle des maschinellen Lernens bereitzustellen.

Die Datenvorverarbeitung umfasst mehrere Schritte, darunter den Umgang mit fehlenden Werten, Datentransformation, Standardisierung, Kodierung usw.

Eine geeignete Vorverarbeitung verbessert nicht nur die Modellgenauigkeit, sondern hilft dem Modell auch, besser zu generalisieren.


1. Umgang mit fehlenden Werten

Fehlende Werte beziehen sich auf das Fehlen von Werten für bestimmte Merkmale im Datensatz.

Algorithmen des maschinellen Lernens können fehlende Werte normalerweise nicht direkt verarbeiten, daher müssen wir sie bearbeiten.

Fehlende Werte prüfen

Prüfen Sie zunächst, ob der Datensatz fehlende Werte enthält.

Typischerweise können wir pandas verwenden, um fehlende Werte im Datensatz zu untersuchen:

Beispiel

import pandas as pd

# Angenommen, wir haben einen DataFrame df
print(df.isnull().sum())  # Anzahl fehlender Werte in jeder Spalte anzeigen

Fehlende Werte füllen

Die gebräuchlichste Methode zum Umgang mit fehlenden Werten ist die Imputation (Auffüllen).

Häufige Imputationsstrategien sind:

  • Mittelwert-Imputation: Geeignet für numerische Daten.
  • Median-Imputation: Bei Datensätzen mit Ausreißern kann die Verwendung des Medians effektiver sein.
  • Modalwert-Imputation (häufigster Wert): Geeignet für kategorische Daten.

In scikit-learn lässt sich die Imputation fehlender Werte mit SimpleImputer einfach umsetzen:

Beispiel

from sklearn.impute import SimpleImputer

# Für numerische Daten Mittelwert-Imputation verwenden
imputer = SimpleImputer(strategy='mean')  # Optionen: 'mean', 'median', 'most_frequent'
df_imputed = imputer.fit_transform(df)  # Fehlende Werte imputieren

Fehlende Werte löschen

Wenn die Anzahl der fehlenden Werte gering ist und ihr Löschen die Analyseergebnisse nicht wesentlich beeinträchtigt, besteht eine weitere Möglichkeit darin, die fehlenden Werte direkt zu löschen.

df_cleaned = df.dropna()  # 删除包含缺失值的行
Weitere Details finden Sie unter:Pandas-Datenbereinigung

2. Daten-Skalierung

Algorithmen des maschinellen Lernens reagieren empfindlich auf die Skalierung der Daten, daher müssen die Daten skaliert werden, damit die Merkmale dieselbe Skala haben.

Gängige Skalierungsmethoden sind:

  • Standardisierung: Transformiert die Daten so, dass sie einen Mittelwert von 0 und eine Standardabweichung von 1 haben. Für die meisten Algorithmen des maschinellen Lernens geeignet.
  • Normalisierung: Skaliert die Daten auf einen bestimmten Bereich (normalerweise [0, 1]).

Standardisierung

Die Standardisierung kann mit StandardScaler implementiert werden, der jedes Merkmal so transformiert, dass es einen Mittelwert von null und eine Einheitsvarianz hat:

Beispiel

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # X standardisieren

Normalisierung

Die Normalisierung skaliert jedes Merkmal auf einen bestimmten Bereich (normalerweise [0, 1]).

MinMaxScaler wird verwendet, um Daten zu normalisieren:

Beispiel

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)  # X normalisieren

Warum benötigen wir Standardisierung und Normalisierung?

  • Standardisierung: Sie ist sehr wichtig für distanzbasierte Metriken (wie K-Nearest Neighbors, Support Vector Machines usw.), weil inkonsistente Merkmalskalen dazu führen können, dass bestimmte Merkmale einen zu großen Einfluss auf das Modell haben. Die Standardisierung stellt sicher, dass jedes Merkmal gleichmäßig zum Modell beiträgt.

  • Normalisierung: Einige Algorithmen (wie neuronale Netze, Gradientenabstiegs-Optimierungsalgorithmen usw.) sind sehr empfindlich gegenüber dem Wertebereich der Eingabedaten. Die Normalisierung hilft, die Konvergenz zu beschleunigen.


3. Kodierung kategorialer Variablen

Modelle des maschinellen Lernens können kategoriale Variablen vom String-Typ normalerweise nicht direkt verarbeiten, daher müssen kategoriale Variablen in numerische Daten umgewandelt werden.

Zu den gängigen Kodierungsmethoden gehören:

Label-Encoding

Label-Encoding ordnet jede Kategorie einer eindeutigen Ganzzahl zu.

Geeignet für Fälle, in denen eine ordinale Beziehung zwischen Kategorien besteht (z. B. niedrig, mittel, hoch).

Beispiel

from sklearn.preprocessing import LabelEncoder

# Angenommen, wir haben eine kategoriale Variable y
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)  # Kategoriale Variable in Ganzzahlen umwandeln

One-Hot-Encoding

One-Hot-Encoding wandelt jede Kategorie in einen binären Vektor um, geeignet für Fälle, in denen keine ordinale Beziehung zwischen Kategorien besteht (z. B. Farben, Länder usw.).

OneHotEncoder kann kategorische Variablen in One-Hot-Encoding umwandeln.

Beispiel

from sklearn.preprocessing import OneHotEncoder

# Angenommen, wir haben eine kategorische Variable X
encoder = OneHotEncoder(sparse=False)  # sparse=False gibt eine dichte Matrix zurück
X_encoded = encoder.fit_transform(X)  # Wandelt die kategorische Variable in One-Hot-Encoding um

In pandas kann die Funktion get_dummies() auch für One-Hot-Encoding verwendet werden:

X_encoded = pd.get_dummies(X)

4. Merkmalsauswahl

Die Merkmalsauswahl verbessert die Modellleistung, indem sie die wichtigsten Merkmale auswählt, und reduziert den Rechenaufwand.

Gängige Methoden zur Merkmalsauswahl sind:

Modellbasierte Merkmalsauswahl

Verwenden Sie einige Machine-Learning-Modelle (wie z. B.EntscheidungsbäumeoderRandom Forests), um die Merkmalswichtigkeit zu bewerten und dadurch eine Merkmalsauswahl durchzuführen.

Beispiel

from sklearn.ensemble import RandomForestClassifier

# Trainiere ein Random-Forest-Modell
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

# Feature-Wichtigkeit abrufen
importances = clf.feature_importances_
print(importances)

Rekursive Merkmalseliminierung (RFE)

RFE ist eine Methode, die rekursiv Schritt für Schritt die am wenigsten wichtigen Merkmale löscht, um die optimalen Merkmale auszuwählen.

RFE kann uns helfen, automatisch wichtige Merkmale auszuwählen.

Beispiel

from sklearn.feature_selection import RFE

# Verwende ein lineares Modell für die rekursive Merkmalseliminierung
rfe = RFE(clf, n_features_to_select=3)  # Behalte die 3 wichtigsten Merkmale
X_rfe = rfe.fit_transform(X_train, y_train)

5. Feature Engineering

Feature Engineering zielt darauf ab, die Modellleistung durch Verarbeitung, Kombination oder Konstruktion neuer Merkmale aus bestehenden zu verbessern.

Zu den gängigen Methoden des Feature-Engineering gehören:

  • Feature-Kombination: Kombiniere zwei oder mehr Features zu einem neuen Feature.
  • Feature-Transformation: Wende Transformationen wie logarithmische oder Quadratwurzel-Transformationen auf Features an, um Nichtlinearität in den Daten zu behandeln.
  • Feature-Erstellung: Erstelle neue Features aus vorhandenen Daten, z. B. durch Extrahieren von Datum, Monat, Wochentag usw. aus einem Zeitstempel.

Beispiel

# Zum Beispiel zwei numerische Features zu einem neuen Feature kombinieren
df['new_feature'] = df['feature1'] * df['feature2']

6. Feature-Extraktion

Die Feature-Extraktion zielt darauf ab, neue, aussagekräftigere Features aus den ursprünglichen Features zu extrahieren.

Gängige Methoden zur Feature-Extraktion umfassen:Hauptkomponentenanalyse (PCA)undLineare Diskriminanzanalyse (LDA)。

Hauptkomponentenanalyse (PCA)

PCA ist eine häufig verwendete Technik zur Dimensionsreduktion, die Daten mittels linearer Transformation von einem hochdimensionalen Raum in einen niedrigdimensionalen Raum abbildet, sodass die neuen Features (Hauptkomponenten) so viel Varianz wie möglich bewahren.

PCA ist besonders geeignet, wenn zu viele Features vorhanden sind, da es die Rechenkomplexität effektiv reduzieren kann.

Beispiel

from sklearn.decomposition import PCA

# Angenommen, X ist die Merkmalsmatrix
pca = PCA(n_components=2)  # Auf 2 Hauptkomponenten reduzieren
X_pca = pca.fit_transform(X)

PCA wird hauptsächlich in zwei Szenarien verwendet:

  • Dimensionsreduktion: Wenn zu viele Merkmale vorhanden sind, kann die Verwendung von PCA zur Dimensionsreduktion den Rechenaufwand verringern und gleichzeitig die wesentlichen Informationen der Daten beibehalten.
  • Visualisierung: Hochdimensionale Daten auf den 2D- oder 3D-Raum abbilden, um uns zu helfen, die Datenstruktur zu visualisieren.

Lineare Diskriminanzanalyse (LDA)

LDA ist eine Dimensionsreduktionsmethode des überwachten Lernens, die darauf abzielt, eine Linearkombination zu finden, die den Abstand zwischen verschiedenen Klassen maximiert und den Abstand innerhalb der Klassen minimiert.

LDA wird häufig für Klassifikationsaufgaben verwendet.

Beispiel

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# Angenommen, X ist die Merkmalsmatrix und y ist die Zielvariable
lda = LinearDiscriminantAnalysis(n_components=2)  # Dimensionsreduktion auf 2 lineare Diskriminanzkomponenten
X_lda = lda.fit_transform(X, y)

7. Umgang mit unausgewogenen Daten

Bei Klassifikationsproblemen kann das Modell, wenn die Anzahl der Stichproben zwischen den Klassen im Datensatz stark variiert, eine Verzerrung zugunsten der Vorhersage der Mehrheitsklasse entwickeln, wodurch die Modellleistung beeinträchtigt wird.

Zu den gängigen Handhabungsmethoden gehören:

Überabtastung

Balancieren Sie den Datensatz, indem Sie die Anzahl der Stichproben in der Minderheitsklasse erhöhen.

Eine gängige Methode ist die Verwendung des SMOTE-Algorithmus (Synthetic Minority Over-sampling Technique).

Beispiel

from imblearn.over_sampling import SMOTE

smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

Unterabtastung

Balancieren Sie den Datensatz, indem Sie die Anzahl der Stichproben in der Mehrheitsklasse reduzieren.

Beispiel

from imblearn.under_sampling import RandomUnderSampler

undersampler = RandomUnderSampler()
X_resampled, y_resampled = undersampler.fit_resample(X_train, y_train)
Andere Erweiterungen