Menu
CoddyTech

Colunas mistas

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 46 de 58.

A maioria das tabelas combina palavras e números, e cada tipo precisa da sua própria etapa. Um ColumnTransformer encaminha cada coluna para sua etapa e combina os resultados:

Um diagrama intitulado 4 colunas entram, 7 colunas saem. Três discos de vinil com gênero, condição, preço e ano. Gênero e condição passam pelo OneHotEncoder e se transformam em cinco colunas 0/1: jazz, rock, good, mint, worn. Preço e ano passam pelo StandardScaler e se transformam em duas colunas escaladas

Para uma loja de discos, em código:

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

Cada entrada é um nome, uma etapa e suas colunas. Diferentemente de get_dummies, o codificador memoriza as categorias de treinamento, então um novo registro recebe as mesmas 7 colunas.

challenge icon

Desafio

Médio

Um clube de xadrez quer saber a chance de vitória de cada jogador antes de uma partida. O código inicial divide chess.csv e lê os dados da partida de hoje à noite.

  1. Codifique opening e color, dimensione rating_gap e minutes e imprima quantas colunas isso gera a partir das linhas de treinamento.
  2. Imprima a chance de vitória na partida de hoje à noite.

Outro clube, três aberturas e sicilian, black, 50, 15:

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

Experimente você mesmo

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

# Partidas de um clube de xadrez: a abertura, a cor do jogador, sua pontuação menos
# a do adversário, os minutos no relógio e se o jogador venceu (1) ou não (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)

# A partida de hoje à noite, uma linha com as mesmas colunas
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [int(input())]})

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online