Menu
CoddyTech

Смешанные столбцы

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 46 из 58.

В большинстве таблиц есть и слова, и числа, и для каждого типа нужен свой шаг. ColumnTransformer направляет каждый столбец на свой шаг и объединяет результаты:

Диаграмма с заголовком: на входе 4 столбца, на выходе 7 столбцов. Три виниловые пластинки с жанром, состоянием, ценой и годом. Жанр и состояние проходят через OneHotEncoder и преобразуются в пять столбцов со значениями 0/1: джаз, рок, хорошее, отличное, потёртое состояние. Цена и год проходят через StandardScaler и преобразуются в два масштабированных столбца

Для магазина пластинок в коде:

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

Каждая запись — это имя, шаг и его столбцы. В отличие от get_dummies, кодировщик запоминает категории обучающей выборки, поэтому новая запись получает те же 7 столбцов.

challenge icon

Задание

Средне

Шахматный клуб хочет знать шанс на победу каждого игрока перед партией. В заготовке разделяется chess.csv и считываются данные сегодняшней партии.

  1. Закодируй opening и color, масштабируй rating_gap и minutes и выведи, сколько столбцов получится из обучающих строк.
  2. Объедини это с логистической регрессией, обучи модель и выведи точность на тестовой выборке.
  3. Выведи шанс на победу в сегодняшней партии.

Другой клуб, три дебюта и sicilian, black, 50, 15:

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

Попробуйте сами

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

# Партии шахматного клуба: дебют, цвет фигур игрока, разница между его рейтингом
# и рейтингом соперника, минуты на часах и выиграл ли игрок (1) или нет (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)

# Сегодняшняя партия — одна строка с теми же столбцами
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [int(input())]})

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python