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:
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.
Aufgabe
MittelEin Schachclub möchte vor einem Spiel die Gewinnchance jedes Spielers wissen. Das Starterprogramm teilt chess.csv auf und liest die heutige Partie ein.
- Kodiere
openingundcolor, skaliererating_gapundminutesund gib aus, wie viele Spalten dadurch aus den Trainingszeilen entstehen. - Kombiniere das mit logistischer Regression, trainiere das Modell und gib die Testgenauigkeit aus.
- 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.66Probier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler