Menu
CoddyTech

Gemischte Spalten

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 46 von 58.

Die meisten Tabellen enthalten sowohl Wörter als auch Zahlen, und jede Art benötigt einen eigenen Schritt. Ein ColumnTransformer leitet jede Spalte an ihren Schritt weiter und fügt die Ergebnisse zusammen:

Ein Diagramm mit dem Titel: 4 Spalten hinein, 7 Spalten hinaus. Drei Schallplatten mit Genre, Zustand, Preis und Jahr. Genre und Zustand durchlaufen OneHotEncoder und werden in fünf 0/1-Spalten umgewandelt: Jazz, Rock, gut, neuwertig, abgenutzt. Preis und Jahr durchlaufen StandardScaler und werden in zwei skalierte Spalten umgewandelt

Für einen Plattenladen, im Code:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

prep = ColumnTransformer([
    ("words", OneHotEncoder(), ["genre", "condition"]),
    ("numbers", StandardScaler(), ["price", "year"]),
])
pipe = make_pipeline(prep, LogisticRegression(max_iter=1000))

Jeder Eintrag besteht aus einem Namen, einem Schritt und dessen Spalten. Anders als get_dummies merkt sich der Encoder die Kategorien aus den Trainingsdaten, sodass ein neuer Datensatz dieselben 7 Spalten erhält.

challenge icon

Aufgabe

Mittel

Ein Schachclub möchte vor einem Spiel die Gewinnchance jedes Spielers wissen. Das Starterprogramm teilt chess.csv auf und liest die heutige Partie ein.

  1. Kodiere opening und color, skaliere rating_gap und minutes und gib aus, wie viele Spalten dadurch aus den Trainingszeilen entstehen.
  2. Kombiniere das mit logistischer Regression, trainiere das Modell und gib die Testgenauigkeit aus.
  3. Gib die heutige Gewinnchance aus.

Ein anderer Club, drei Eröffnungen und sicilian, black, 50, 15:

Columns after preparing: 7
Test accuracy: 0.805
Win chance: 0.66

Probier es selbst

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

# Partien eines Schachklubs: die Eröffnung, die Farbe des Spielers, seine Wertungszahl abzüglich
# der des Gegners, die verbleibenden Minuten auf der Uhr und ob der Spieler gewonnen hat (1) oder nicht (0)
games = pd.read_csv("chess.csv")
X = games[["opening", "color", "rating_gap", "minutes"]]
y = games["won"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Die heutige Partie als eine Zeile mit denselben Spalten
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [int(input())]})

# Schreibe deinen Code darunter
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler