Aprendizaje no supervisado en Python
Benjamin Wilson
Director of Research at lateral.io
178 muestras de 3 variedades de vino tinto: Barolo, Grignolino y Barbera
Las características miden la composición química, p. ej., contenido de alcohol
Propiedades visuales como «intensidad de color»
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
df = pd.DataFrame({'labels': labels, 'varieties': varieties}) ct = pd.crosstab(df['labels'], df['varieties'])print(ct)
varieties Barbera Barolo Grignolino
labels
0 29 13 20
1 0 46 1
2 19 0 50
¡Las características del vino tienen varianzas muy distintas!
La varianza de una característica mide la dispersión de sus valores
feature variance
alcohol 0.65
malic_acid 1.24
...
od280 0.50
proline 99166.71

¡Las características del vino tienen varianzas muy distintas!
La varianza de una característica mide la dispersión de sus valores
feature variance
alcohol 0.65
malic_acid 1.24
...
od280 0.50
proline 99166.71

En k-means: mayor varianza ⇒ mayor influencia
StandardScaler transforma cada característica a media 0 y varianza 1
Se dice que las características quedan «estandarizadas»

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(samples) StandardScaler(copy=True, with_mean=True, with_std=True)samples_scaled = scaler.transform(samples)
StandardScaler y KMeans tienen métodos similares
Con StandardScaler: fit() / transform()
Con KMeans: fit() / predict()
Dos pasos: StandardScaler y luego KMeans
Usa un pipeline de sklearn para combinarlos
Los datos fluyen de un paso al siguiente
from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans scaler = StandardScaler() kmeans = KMeans(n_clusters=3)from sklearn.pipeline import make_pipelinepipeline = make_pipeline(scaler, kmeans)pipeline.fit(samples)
Pipeline(steps=...)
labels = pipeline.predict(samples)
Con estandarización de características:
varieties Barbera Barolo Grignolino
labels
0 0 59 3
1 48 0 3
2 0 0 65
Sin estandarizar las características fue muy malo:
varieties Barbera Barolo Grignolino
labels
0 29 13 20
1 0 46 1
2 19 0 50
StandardScaler es un paso de «preprocesamiento»
MaxAbsScaler y Normalizer son otros ejemplos
Aprendizaje no supervisado en Python