Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:m245:learningunits:lu02:loesungen:l02 [2026/01/05 13:29] – vdemir | de:modul:m245:learningunits:lu02:loesungen:l02 [2026/04/08 08:43] (aktuell) – [Modellvergleich] vdemir | ||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| ===== Voraussetzung ===== | ===== Voraussetzung ===== | ||
| - | | + | <code python> |
| - | + | pip install pandas scikit-learn joblib | |
| + | </ | ||
| ===== Python-Skript: | ===== Python-Skript: | ||
| + | <code python> | ||
| + | import pandas as pd | ||
| + | from sklearn.model_selection import train_test_split | ||
| + | from sklearn.pipeline import Pipeline | ||
| + | from sklearn.preprocessing import StandardScaler | ||
| + | from sklearn.linear_model import LogisticRegression | ||
| + | from sklearn.tree import DecisionTreeClassifier | ||
| + | from sklearn.metrics import accuracy_score, | ||
| + | import joblib | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Daten laden | ||
| + | # ----------------------------- | ||
| + | data = pd.read_csv(" | ||
| + | X = data.drop(" | ||
| + | y = data[" | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Train / Test Split | ||
| + | # ----------------------------- | ||
| + | X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Modell 1: Logistische Regression | ||
| + | # ----------------------------- | ||
| + | log_reg_pipeline = Pipeline([ | ||
| + | (" | ||
| + | (" | ||
| + | ]) | ||
| + | |||
| + | log_reg_pipeline.fit(X_train, | ||
| + | y_pred_lr = log_reg_pipeline.predict(X_test) | ||
| + | # | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Modell 2: Decision Tree | ||
| + | # ----------------------------- | ||
| + | tree_model = DecisionTreeClassifier(random_state=42) | ||
| + | tree_model.fit(X_train, | ||
| + | y_pred_tree = tree_model.predict(X_test) | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Bestes Modell speichern | ||
| + | # ----------------------------- | ||
| + | joblib.dump(log_reg_pipeline, | ||
| + | |||
| + | # ----------------------------- | ||
| + | # Neue Vorhersage | ||
| + | # ----------------------------- | ||
| + | new_customer = pd.DataFrame([{ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }]) | ||
| + | |||
| + | loaded_model = joblib.load(" | ||
| + | prediction = loaded_model.predict(new_customer) | ||
| + | |||
| + | print(" | ||
| + | </ | ||
| + | | ||
| + | ===== Modellvergleich ===== | ||
| + | ^ Kriterium ^ Logistische Regression ^ Decision Tree ^ | ||
| + | | Interpretierbarkeit | hoch | mittel | | ||
| + | | Overfitting-Gefahr | gering | hoch | | ||
| + | | Skalierung | nötig ja | nein | | ||
| + | | Didaktisch | sinnvoll sehr | ja | | ||
| + | |||
| + | ===== Fazit ===== | ||
| + | * Bei kleinen, sauberen Datensätzen ist die Logistische Regression meist stabiler. | ||
| + | * Decision Trees sind anschaulich, | ||
| + | |||
| + | ---- | ||
| + | [[https:// | ||
| - | import pandas as pd | ||
| - | from sklearn.model_selection import train_test_split | ||
| - | from sklearn.pipeline import Pipeline | ||
| - | from sklearn.preprocessing import StandardScaler | ||
| - | from sklearn.linear_model import LogisticRegression | ||
| - | from sklearn.tree import DecisionTreeClassifier | ||
| - | from sklearn.metrics import accuracy_score, | ||
| - | import joblib | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Daten laden | ||
| - | # ----------------------------- | ||
| - | data = pd.read_csv(" | ||
| - | # | ||
| - | X = data.drop(" | ||
| - | y = data[" | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Train / Test Split | ||
| - | # ----------------------------- | ||
| - | X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Modell 1: Logistische Regression | ||
| - | # ----------------------------- | ||
| - | log_reg_pipeline = Pipeline([ | ||
| - | (" | ||
| - | (" | ||
| - | ]) | ||
| - | # | ||
| - | log_reg_pipeline.fit(X_train, | ||
| - | y_pred_lr = log_reg_pipeline.predict(X_test) | ||
| - | # | ||
| - | print(" | ||
| - | print(" | ||
| - | print(" | ||
| - | print(" | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Modell 2: Decision Tree | ||
| - | # ----------------------------- | ||
| - | tree_model = DecisionTreeClassifier(random_state=42) | ||
| - | tree_model.fit(X_train, | ||
| - | y_pred_tree = tree_model.predict(X_test) | ||
| - | # | ||
| - | print(" | ||
| - | print(" | ||
| - | print(" | ||
| - | print(" | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Bestes Modell speichern | ||
| - | # ----------------------------- | ||
| - | joblib.dump(log_reg_pipeline, | ||
| - | # | ||
| - | # ----------------------------- | ||
| - | # Neue Vorhersage | ||
| - | # ----------------------------- | ||
| - | new_customer = pd.DataFrame([{ | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | }]) | ||
| - | # | ||
| - | loaded_model = joblib.load(" | ||
| - | prediction = loaded_model.predict(new_customer) | ||
| - | # | ||
| - | print(" | ||
| | | ||