Skip to content

Der ultimative Leitfaden: Wie man den Scikit-learn Imputer verwendet

Updated on

Bei der Arbeit mit großen Datensätzen ist es kaum zu vermeiden, auf fehlende Werte zu stoßen. Der effiziente Umgang mit fehlenden Daten ist ein grundlegender Schritt bei der Vorverarbeitung von Daten. Scikit-learns Imputer bietet eine Reihe robuster Strategien für diese Aufgabe. In diesem Artikel werden wir uns mit Scikit-learns SimpleImputer, IterativeImputer, KNNImputer und deren Nutzung zur Behandlung von numerischen und kategorischen Daten befassen.

Möchten Sie ganz einfach Datensichtbarkeit aus Python Pandas Dataframe ohne Code erstellen?

PyGWalker ist eine Python-Bibliothek für die explorative Datenanalyse mit Visualisierung. PyGWalker (opens in a new tab) kann Ihren Workflow zur Datenanalyse und Datensichtbarkeit in Jupyter Notebooks vereinfachen, indem es Ihren Pandas Dataframe (und Polars Dataframe) in eine benutzerfreundliche Benutzeroberfläche im Stil von Tableau für visuelle Exploration verwandelt.

PyGWalker für die Datenvisualisierung (opens in a new tab)

Der Imputer entzaubern

Bevor wir uns mit den "Wie"-Anleitungen befassen, wollen wir zunächst verstehen, was ein Imputer ist. Ein Imputer ist im Wesentlichen ein Vorhersagemodell, das fehlende Werte in Ihrem Datensatz ergänzt. Bei numerischen Daten verwendet es Strategien wie Mittelwert, Median oder Konstante, während es bei kategorischen Daten den am häufigsten vorkommenden Wert oder eine Konstante verwendet. Sie können Ihr Modell auch trainieren, um die fehlenden Werte basierend auf der Komplexität Ihrer Daten und den verfügbaren Ressourcen vorherzusagen.

In diesem Leitfaden konzentrieren wir uns hauptsächlich auf SimpleImputer, IterativeImputer und KNNImputer von Scikit-learn. Darüber hinaus werden wir Sie durch den Prozess der Erstellung einer Pipeline führen, um sowohl kategoriale als auch numerische Merkmale nahtlos zu ergänzen und sie in ein maschinelles Lernmodell einzuspeisen.

Einrichten des Scikit-learn Imputers

Die Imputationsfunktionen von Scikit-learn bieten eine praktische Möglichkeit, fehlende Daten mit nur wenigen Codezeilen zu behandeln. Darüber hinaus ermöglichen sie Ihnen die Erstellung von Pipelines, um die Ergebnisse reproduzierbar zu machen und Ihren Workflow in der maschinellen Lernentwicklung zu verbessern.

Umgebung und Datensatz

Bevor wir uns in die Details der Verwendung von Scikit-learn's Imputer vertiefen, richten wir zuerst unsere Umgebung ein und erhalten einen Datensatz. Für dieses Tutorial verwenden wir die Pima Indianer Diabetes-Datenbank, einen beliebten Datensatz in der maschinellen Lerngemeinschaft.

Dieser Datensatz steht kostenlos auf Kaggle zur Verfügung und wir können ihn direkt über die Kaggle-API herunterladen. Zunächst müssen wir jedoch die erforderlichen Python-Bibliotheken installieren:

!pip install numpy pandas scikit-learn kaggle

Als nächstes laden wir die Pima Indianer Diabetes-Datenbank mit Hilfe der Kaggle-API herunter:

!kaggle datasets download -d uciml/pima-indians-diabetes-database
!unzip pima-indians-diabetes-database.zip -d ./dataset

Jetzt, da wir unseren Datensatz haben, laden wir ihn in ein pandas DataFrame und schauen ihn uns an:

import pandas as pd
 
df = pd.read_csv("./dataset/diabetes.csv")
print(df.head())

Eintauchen in den Datensatz

Sobald wir die Daten geladen haben, ist es wichtig, deren Struktur zu verstehen. Die Pima Indianer Diabetes-Datenbank enthält acht numerische Merkmale und eine binäre Zielspalte namens "Outcome". Die Merkmale beziehen sich auf verschiedene Gesundheitsmesswerte wie den Glukosespiegel, den Blutdruck und den BMI, während die Zielspalte angibt, ob eine Person Diabetes hat oder nicht.

Zunächst betrachten wir die Form unseres Datensatzes:

print(df.shape)

Mit dieser Ausgabe bestätigen wir, dass unser Datensatz 768 Zeilen und 9 Spalten enthält.

Enthüllung von fehlenden Werten

In realen Datensätzen sind fehlende Werte recht häufig. Daher müssen wir, bevor wir mit der Modellierung des maschinellen Lernens beginnen, diese fehlenden Werte identifizieren und angemessen behandeln.

Überprüfen wir, ob in unserem Datensatz fehlende Werte vorhanden sind:

missing_values = df.isnull().sum()
print(missing_values)

In einem idealen Szenario würden für alle Spalten Nullen zurückgegeben werden. In der Praxis ist das jedoch selten der Fall. In den nächsten Abschnitten werden wir besprechen, wie man mit diesen fehlenden Werten umgeht.

Ergänzung numerischer Werte

Im Bereich des Scikit-learn-Imputers unterscheiden wir zwischen numerischer und kategorischer Ergänzung. Die numerische Ergänzung ist der Prozess des Ersatzes fehlender numerischer Werte durch statistische Schätzungen. Dabei ist es üblich, den Mittelwert, Median oder Modus als Ersatzwert zu verwenden.

Für unser Tutorial nehmen wir an, dass in der Spalte 'BloodPressure' fehlende Werte vorhanden sind. Unsere erste Aufgabe besteht darin, die Anzahl der fehlenden Werte zu bestätigen:

print(df['BloodPressure'].isnull().sum())

Im nächsten Abschnitt lernen wir, wie man diese fehlenden Werte mit Hilfe von Scikit-learn's SimpleImputer ausfüllt.

Ergänzung numerischer Werte mit Scikit-learn's SimpleImputer

Scikit-learn's SimpleImputer bietet eine einfache Möglichkeit, fehlende numerische Werte zu bearbeiten. Es bietet verschiedene Strategien, darunter die Ersetzung von fehlenden Werten durch den Mittelwert, Median oder einen konstanten Wert. Schauen wir uns ein Beispiel an, wie man SimpleImputer verwendet, um die fehlenden Werte in der Spalte 'BloodPressure' zu ergänzen.

from sklearn.impute import SimpleImputer
 
# Erstellen einer Instanz von SimpleImputer
imputer = SimpleImputer(strategy='mean')
 
# Umformung der Spalte in ein 2D-Array
blood_pressure = df['BloodPressure'].values.reshape(-1, 1)
 
# Ergänzung der fehlenden Werte
imputed_blood_pressure = imputer.fit_transform(blood_pressure)
 
# Aktualisierung des DataFrames mit den ergänzten Werten
df['BloodPressure'] = imputed_blood_pressure

Durch Festlegung des Strategieparameters auf 'mean ' berechnet der SimpleImputer den Durchschnitt der verfügbaren Werte und ersetzt die fehlenden Werte durch diesen Durchschnittswert. Je nach Art der Daten können Sie auch 'median' oder 'constant' als Strategie verwenden.

Nachdem die fehlenden Werte ersetzt wurden, ist es immer eine gute Praxis, zu überprüfen, ob noch fehlende Werte vorhanden sind:

print(df['BloodPressure'].isnull().sum())

Mit den ergänzten fehlenden Werten sollte die Ausgabe 0 sein, was darauf hinweist, dass in der Spalte 'BloodPressure' keine fehlenden Werte mehr vorhanden sind.

Korrektur von kategorischen Werten

Nun gehen wir zur Korrektur der kategorischen Werte über. In diesem Beispiel betrachten wir die Spalte 'SkinThickness', die fehlende kategoriale Werte enthält.

Ähnlich wie im vorherigen Abschnitt überprüfen wir zunächst, wie viele fehlende Werte in der Spalte 'SkinThickness' vorhanden sind:

print(df['SkinThickness'].isnull().sum())

Zur Korrektur der kategorischen Werte können wir die Strategie 'most_frequent' verwenden, die vom SimpleImputer bereitgestellt wird. Diese Strategie ersetzt fehlende Werte durch den häufigsten Wert in der Spalte.

# Eine Instanz des SimpleImputers für kategoriale Werte erstellen
imputer_categorical = SimpleImputer(strategy='most_frequent')
 
# Die Spalte in ein 2D-Array umformen
skin_thickness = df['SkinThickness'].values.reshape(-1, 1)
 
# Die fehlenden Werte ergänzen
imputed_skin_thickness = imputer_categorical.fit_transform(skin_thickness)
 
# Das DataFrame mit den ergänzten Werten aktualisieren
df['SkinThickness'] = imputed_skin_thickness

Nachdem die fehlenden Werte ergänzt wurden, überprüfen wir, ob noch fehlende Werte in der 'SkinThickness'-Spalte vorhanden sind:

print(df['SkinThickness'].isnull().sum())

Die Ausgabe sollte 0 sein, was darauf hinweist, dass alle fehlenden kategorialen Werte in der 'SkinThickness'-Spalte erfolgreich ergänzt wurden.

Fazit

In diesem Teil des Leitfadens haben wir gelernt, wie man den SimpleImputer von Scikit-learn verwendet, um fehlende Werte in numerischen und kategorialen Spalten zu behandeln. Wir haben Strategien wie Durchschnitt, Median und am häufigsten verwendet, um fehlende Werte je nach Art der Daten zu ergänzen.

Die Ergänzung ist ein wesentlicher Schritt im Datenverarbeitungspipeline, da sie es uns ermöglicht, wertvolle Informationen zu erhalten und sicherzustellen, dass unsere Modelle aus vollständigen Datensätzen lernen können. Mit Hilfe des SimpleImputers von Scikit-learn können Datenwissenschaftler und maschinelles Lernen-Praktiker fehlende Daten effizient behandeln und robuste Modelle erstellen.