Menu
CoddyTech

Columnas mixtas

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 46 de 58.

La mayoría de las tablas mezclan palabras y números, y cada tipo necesita su propio paso. ColumnTransformer envía cada columna a su paso y combina los resultados:

Un diagrama titulado 4 columnas de entrada, 7 columnas de salida. Tres discos de vinilo con género, estado, precio y año. El género y el estado pasan por OneHotEncoder y se convierten en cinco columnas 0/1: jazz, rock, bueno, impecable, desgastado. El precio y el año pasan por StandardScaler y se convierten en dos columnas escaladas

Para una tienda de discos, en 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 es un nombre, un paso y sus columnas. A diferencia de get_dummies, el codificador recuerda las categorías de entrenamiento, así que un nuevo registro obtiene las mismas 7 columnas.

challenge icon

Desafío

Intermedio

Un club de ajedrez quiere conocer la probabilidad de victoria de cada jugador antes de una partida. El código inicial divide chess.csv y lee la partida de esta noche.

  1. opening y color, escala rating_gap y minutes, e imprime cuántas columnas se obtienen a partir de las filas de entrenamiento.
  2. Encadénalo con una regresión logística, ajústalo e imprime la precisión de prueba.
  3. Imprime la probabilidad de victoria de esta noche.

Otro club, tres aperturas y sicilian, black, 50, 15:

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

Pruébalo tú mismo

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 un club de ajedrez: la apertura, el color del jugador, su puntuación menos
# la del oponente, los minutos en el reloj y si el jugador ganó (1) o no (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)

# La partida de esta noche, una fila con las mismas columnas
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [int(input())]})

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online