Menu
CoddyTech

Mieszane kolumny

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 46 z 58.

Większość tabel zawiera zarówno słowa, jak i liczby, a każdy typ wymaga własnego kroku. ColumnTransformer przekazuje każdą kolumnę do odpowiedniego kroku i łączy wyniki:

Diagram zatytułowany: 4 kolumny na wejściu, 7 kolumn na wyjściu. Trzy płyty winylowe z gatunkiem, stanem, ceną i rokiem. Gatunek i stan przechodzą przez OneHotEncoder, tworząc pięć kolumn z wartościami 0/1: jazz, rock, dobry, jak nowy, zużyty. Cena i rok przechodzą przez StandardScaler, tworząc dwie przeskalowane kolumny

W przypadku sklepu z płytami, w kodzie:

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))

Każdy wpis zawiera nazwę, krok i jego kolumny. W przeciwieństwie do get_dummies, koder zapamiętuje kategorie z danych treningowych, więc każdy nowy rekord otrzymuje te same 7 kolumn.

challenge icon

Wyzwanie

Średni

Klub szachowy chce znać szansę na wygraną każdego gracza przed partią. Kod początkowy dzieli dane z chess.csv i odczytuje dane dzisiejszej partii.

  1. Zakoduj opening i color, przeskaluj rating_gap i minutes, a następnie wypisz, ile kolumn powstaje na podstawie wierszy treningowych.
  2. Połącz to z regresją logistyczną, dopasuj model i wypisz dokładność na zbiorze testowym.
  3. Wypisz szansę na wygraną w dzisiejszej partii.

Inny klub, trzy debiuty oraz sicilian, black, 50, 15:

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

Spróbuj swoich sił

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

# Partie klubu szachowego: debiut, kolor bierek gracza, jego ranking pomniejszony o ranking
# przeciwnika, liczba minut na zegarze oraz to, czy gracz wygrał (1), czy nie (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)

# Dzisiejsza partia, jeden wiersz z tymi samymi kolumnami
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [int(input())]})

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online