Automatisierung der Vorverarbeitung mit Pipelines
Automatisierung der Vorverarbeitung und Merkmalsgenerierung mit scikit-learn-Pipelines zur Sicherstellung konsistenter, reproduzierbarer Ergebnisse im maschinellen Lernen. Pipelines ermöglichen das Verketten von Schritten wie Skalierung, Kodierung und Merkmalsauswahl, sodass jede Transformation stets in derselben Reihenfolge erfolgt.
Zum Erstellen einer Pipeline in scikit-learn wird eine Liste von Schritten definiert, wobei jeder Schritt ein Tupel aus einem eindeutigen Schrittnamen (als Zeichenkette) und einem Transformer-Objekt (wie StandardScaler oder SelectKBest) ist. Beispiel:
steps = [
("scaler", StandardScaler()),
("feature_selection", SelectKBest(score_func=f_classif, k=2))
]
Diese Liste wird anschließend an das Pipeline-Objekt übergeben:
pipeline = Pipeline(steps)
Die Pipeline wendet jeden Transformer der Reihe nach an und gibt die Ausgabe eines Schritts als Eingabe an den nächsten weiter. Dieser Ansatz spart nicht nur Zeit, sondern reduziert auch das Risiko von Datenlecks und macht Experimente zuverlässiger und leichter reproduzierbar.
Verwendung von ColumnTransformer für Merkmals-Teilgruppen
Mit ColumnTransformer können verschiedene Vorverarbeitungspipelines auf unterschiedliche Teilmengen von Merkmalen innerhalb der Daten angewendet werden. Beispiel:
# Define column types
numeric_features = ['age', 'fare']
categorical_features = ['embarked', 'sex']
# Preprocessing for numeric features: impute missing values and scale
numeric_transformer = Pipeline([
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
# Preprocessing for categorical features: impute missing values and encode
categorical_transformer = Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
Dies ermöglicht den Aufbau einer einzigen, einheitlichen Pipeline, die sowohl numerische als auch kategoriale Datentypen korrekt verarbeitet, den Vorverarbeitungscode übersichtlich hält und sicherstellt, dass jede Transformation auf die vorgesehenen Spalten angewendet wird.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import numpy as np import pandas as pd import seaborn as sns from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.feature_selection import SelectKBest, f_classif # Load the Titanic dataset from seaborn (no warnings!) df = sns.load_dataset('titanic') # Select features and target features = ['age', 'fare', 'embarked', 'sex'] X = df[features] y = df['survived'] # Target variable # Define column types numeric_features = ['age', 'fare'] categorical_features = ['embarked', 'sex'] # Preprocessing for numeric features: impute missing values and scale numeric_transformer = Pipeline([ ('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()) ]) # Preprocessing for categorical features: impute missing values and encode categorical_transformer = Pipeline([ ('imputer', SimpleImputer(strategy='most_frequent')), ('encoder', OneHotEncoder(handle_unknown='ignore')) ]) # Combine preprocessing steps preprocessor = ColumnTransformer([ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features) ]) # Build the full pipeline with preprocessing and feature selection pipeline = Pipeline([ ('preprocessing', preprocessor), ('feature_selection', SelectKBest(score_func=f_classif, k=3)) ]) # Fit and transform the data X_transformed = pipeline.fit_transform(X, y) print(f"Original shape: {X.shape}") print(f"Reduced from {X.shape[1]} features to {X_transformed.shape[1]} selected features")
Die Integration der Vorverarbeitung in die Trainingspipeline gewährleistet konsistente Transformationen und hilft, Datenlecks sowohl während des Trainings als auch bei der Vorhersage zu vermeiden.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 8.33
Automatisierung der Vorverarbeitung mit Pipelines
Swipe um das Menü anzuzeigen
Automatisierung der Vorverarbeitung und Merkmalsgenerierung mit scikit-learn-Pipelines zur Sicherstellung konsistenter, reproduzierbarer Ergebnisse im maschinellen Lernen. Pipelines ermöglichen das Verketten von Schritten wie Skalierung, Kodierung und Merkmalsauswahl, sodass jede Transformation stets in derselben Reihenfolge erfolgt.
Zum Erstellen einer Pipeline in scikit-learn wird eine Liste von Schritten definiert, wobei jeder Schritt ein Tupel aus einem eindeutigen Schrittnamen (als Zeichenkette) und einem Transformer-Objekt (wie StandardScaler oder SelectKBest) ist. Beispiel:
steps = [
("scaler", StandardScaler()),
("feature_selection", SelectKBest(score_func=f_classif, k=2))
]
Diese Liste wird anschließend an das Pipeline-Objekt übergeben:
pipeline = Pipeline(steps)
Die Pipeline wendet jeden Transformer der Reihe nach an und gibt die Ausgabe eines Schritts als Eingabe an den nächsten weiter. Dieser Ansatz spart nicht nur Zeit, sondern reduziert auch das Risiko von Datenlecks und macht Experimente zuverlässiger und leichter reproduzierbar.
Verwendung von ColumnTransformer für Merkmals-Teilgruppen
Mit ColumnTransformer können verschiedene Vorverarbeitungspipelines auf unterschiedliche Teilmengen von Merkmalen innerhalb der Daten angewendet werden. Beispiel:
# Define column types
numeric_features = ['age', 'fare']
categorical_features = ['embarked', 'sex']
# Preprocessing for numeric features: impute missing values and scale
numeric_transformer = Pipeline([
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
# Preprocessing for categorical features: impute missing values and encode
categorical_transformer = Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
Dies ermöglicht den Aufbau einer einzigen, einheitlichen Pipeline, die sowohl numerische als auch kategoriale Datentypen korrekt verarbeitet, den Vorverarbeitungscode übersichtlich hält und sicherstellt, dass jede Transformation auf die vorgesehenen Spalten angewendet wird.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import numpy as np import pandas as pd import seaborn as sns from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.feature_selection import SelectKBest, f_classif # Load the Titanic dataset from seaborn (no warnings!) df = sns.load_dataset('titanic') # Select features and target features = ['age', 'fare', 'embarked', 'sex'] X = df[features] y = df['survived'] # Target variable # Define column types numeric_features = ['age', 'fare'] categorical_features = ['embarked', 'sex'] # Preprocessing for numeric features: impute missing values and scale numeric_transformer = Pipeline([ ('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()) ]) # Preprocessing for categorical features: impute missing values and encode categorical_transformer = Pipeline([ ('imputer', SimpleImputer(strategy='most_frequent')), ('encoder', OneHotEncoder(handle_unknown='ignore')) ]) # Combine preprocessing steps preprocessor = ColumnTransformer([ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features) ]) # Build the full pipeline with preprocessing and feature selection pipeline = Pipeline([ ('preprocessing', preprocessor), ('feature_selection', SelectKBest(score_func=f_classif, k=3)) ]) # Fit and transform the data X_transformed = pipeline.fit_transform(X, y) print(f"Original shape: {X.shape}") print(f"Reduced from {X.shape[1]} features to {X_transformed.shape[1]} selected features")
Die Integration der Vorverarbeitung in die Trainingspipeline gewährleistet konsistente Transformationen und hilft, Datenlecks sowohl während des Trainings als auch bei der Vorhersage zu vermeiden.
Danke für Ihr Feedback!