Agrupamentos como características
Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 40 de 51.
Um modelo de linha reta não consegue se curvar. O sinal de telefone em três vilarejos diminui com a distância em relação à antena de cada vilarejo, uma característica que apenas a posição não revela:
k-means encontra as aldeias. km.transform fornece a distância de cada linha até todos os centros, e .min(axis=1) mantém o mais próximo:
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])Com essa coluna extra, o R ao quadrado de teste de um modelo linear sobe de 0.000 para 0.886.
Ajuste o k-means apenas às linhas de treinamento, como faria com um escalonador, e depois transforme os dois conjuntos.
Desafio
MédioA equipe de som de um festival quer saber quão alto está o som onde as pessoas ficam. O código inicial divide crowd.csv, lê k e imprime a pontuação usando apenas a posição.
- Ajuste o k-means com
kagrupamentos nas posições de treinamento. - Adicione a distância de cada linha até seu centro mais próximo como uma terceira coluna, em ambos os conjuntos.
- Imprima o novo R quadrado de teste e o ganho, com 3 casas decimais.
Para outro festival e k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Experimente você mesmo
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 frequentadores do festival: onde estavam (m) e o nível sonoro naquele local (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 uma regressão linear às colunas de treinamento e retorna seu R quadrado nas colunas de teste
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}")
# Escreva seu código abaixo
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 não supervisionado
1Encontrando Grupos
Aprendendo sem RótulosMedindo a SimilaridadeK-Means à MãoK-Means no scikit-learnRevisão: Frequentadores da Academia4Clustering Hierárquico
Mesclando passo a passoModelos aglomerativosDendrogramasRevisão: raças de cães7PCA na prática
Visualizando 64 dimensõesComponentes como padrõesComprimir e reconstruirPCA antes de um modeloRecapitulação: scanner facial10Projeto: Explorando os Dígitos
Observe os DígitosReduza com PCAAgrupe os DígitosDê Nome aos GruposEncontre os Diferentes2Escolhendo k
InérciaO método do cotoveloPontuações de silhuetaEscale antes de agruparRecapitulando: zonas de entrega3Interpretando agrupamentos
Caracterizando agrupamentosCentros em unidades reaisAgrupamentos versus rótulos conhecidosQuando o K-Means falhaRevisão: degustação de chá9Agrupamentos em ação
Segmentos de clientesAgrupamentos como característicasCores em imagensRevisão: humores de playlistsPratique por conta própria: Compilador de Python online