Clústeres como características
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 40 de 51.
Un modelo lineal no puede curvarse. La señal telefónica en tres pueblos se debilita con la distancia a la antena de cada pueblo, una forma que la posición por sí sola oculta:
k-means encuentra las aldeas. km.transform da la distancia de cada fila a todos los centros, y .min(axis=1) conserva la más cercana:
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])Con esa columna adicional, el R cuadrado de prueba de un modelo lineal sube de 0.000 a 0.886.
Ajusta k-means solo con las filas de entrenamiento, como un escalador, y después transforma ambos conjuntos.
Desafío
IntermedioEl equipo de sonido de un festival quiere saber qué tan alto es el sonido donde se encuentra la gente. El código inicial divide crowd.csv, lee k e imprime la puntuación usando solo la posición.
- Ajusta k-means con
kclústeres a las posiciones de entrenamiento. - Añade la distancia de cada fila al centro más cercano como tercera columna, en ambos conjuntos.
- Imprime el nuevo R cuadrado de prueba y la ganancia, con 3 decimales.
Para otro festival y k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Pruébalo tú mismo
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
# 250 asistentes al festival: dónde estaban situados (m) y el nivel de sonido allí (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# Ajusta una regresión lineal con las columnas de entrenamiento y devuelve su R al cuadrado para las columnas de prueba
def test_r2(A_train, A_test):
model = LinearRegression().fit(A_train, y_train)
return model.score(A_test, y_test)
before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje no supervisado
1Encontrar grupos
Aprender sin etiquetasMedir la similitudK-Means a manoK-Means en scikit-learnRepaso: miembros del gimnasio7PCA en la práctica
Visualizar 64 dimensionesComponentes como patronesComprimir y reconstruirPCA antes de un modeloRepaso: escáner facial10Proyecto: Explorador de dígitos
Observa los dígitosReduce con PCAAgrupa los dígitosPon nombre a los gruposEncuentra los diferentes2Elegir k
InerciaEl método del codoPuntuaciones de siluetaEscalar antes de agruparRepaso: zonas de entrega3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de té9Clústeres en acción
Segmentos de clientesClústeres como característicasColores de imágenesRepaso: estados de ánimo de listas de reproducciónPractica por tu cuenta: Compilador de Python online