Einführung
In diesem Lab lernen wir, wie wir die set_output-API in Scikit-Learn verwenden, um Transformatoren so zu konfigurieren, dass sie pandas DataFrames ausgeben. Diese Funktion ist nützlich, wenn es um heterogene Daten und Pipelines in Scikit-Learn geht.
Tipps für die VM
Nachdem der VM-Start abgeschlossen ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Lade den Iris-Datensatz
Zunächst laden wir den Iris-Datensatz als DataFrame, um die set_output-API zu demonstrieren.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(as_frame=True, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
X_train.head()
Konfiguriere einen Transformator, um DataFrames auszugeben
Um einen Schätzer wie preprocessing.StandardScaler so zu konfigurieren, dass er DataFrames zurückgibt, rufe set_output auf.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().set_output(transform="pandas")
scaler.fit(X_train)
X_test_scaled = scaler.transform(X_test)
X_test_scaled.head()
Konfiguriere transform nach fit
set_output kann nach fit aufgerufen werden, um transform nachträglich zu konfigurieren.
scaler2 = StandardScaler()
scaler2.fit(X_train)
X_test_np = scaler2.transform(X_test)
print(f"Standardausgabetyp: {type(X_test_np).__name__}")
scaler2.set_output(transform="pandas")
X_test_df = scaler2.transform(X_test)
print(f"Konfigurierter pandas-Ausgabetyp: {type(X_test_df).__name__}")
Konfiguriere einen Pipeline, um DataFrames auszugeben
In einer pipeline.Pipeline konfiguriert set_output alle Schritte, um DataFrames auszugeben.
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectPercentile
clf = make_pipeline(
StandardScaler(), SelectPercentile(percentile=75), LogisticRegression()
)
clf.set_output(transform="pandas")
clf.fit(X_train, y_train)
Lade den Titanic-Datensatz
Als nächstes laden wir den Titanic-Datensatz, um set_output mit compose.ColumnTransformer und heterogenen Daten zu demonstrieren.
from sklearn.datasets import fetch_openml
X, y = fetch_openml(
"titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
Konfiguriere set_output global
Die set_output-API kann global konfiguriert werden, indem man set_config verwendet und transform_output auf "pandas" setzt.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn import set_config
set_config(transform_output="pandas")
num_pipe = make_pipeline(SimpleImputer(), StandardScaler())
num_cols = ["age", "fare"]
ct = ColumnTransformer(
(
("numerisch", num_pipe, num_cols),
(
"kategorisch",
OneHotEncoder(
sparse_output=False, drop="if_binary", handle_unknown="ignore"
),
["embarked", "sex", "pclass"],
),
),
verbose_feature_names_out=False,
)
clf = make_pipeline(ct, SelectPercentile(percentile=50), LogisticRegression())
clf.fit(X_train, y_train)
Konfiguriere set_output mit config_context
Wenn die Ausgabetyp-Konfiguration mit config_context erfolgt, zählt die Konfiguration zu dem Zeitpunkt, zu dem transform oder fit_transform aufgerufen werden.
scaler = StandardScaler()
scaler.fit(X_train[num_cols])
with config_context(transform_output="pandas"):
X_test_scaled = scaler.transform(X_test[num_cols])
X_test_scaled.head()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man die set_output-API in Scikit-Learn verwendet, um Transformatoren so zu konfigurieren, dass sie pandas DataFrames ausgeben. Wir haben gezeigt, wie man einen Schätzer so konfiguriert, dass er DataFrames ausgibt, eine Pipeline so konfiguriert, dass sie DataFrames ausgibt, und set_output global mit set_config konfiguriert. Wir haben auch gelernt, wie man set_output mit config_context konfiguriert.