Transformando features para melhores clusters

Unsupervised Learning em Python

Benjamin Wilson

Director of Research at lateral.io

Conjunto de vinhos do Piemonte

  • 178 amostras de 3 variedades de vinho tinto: Barolo, Grignolino e Barbera

  • Features medem composição química, ex.: teor alcoólico

  • Propriedades visuais como “intensidade de cor”

1 Source: https://archive.ics.uci.edu/ml/datasets/Wine
Unsupervised Learning em Python

Agrupando os vinhos

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
Unsupervised Learning em Python

Clusters vs. variedades

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
Unsupervised Learning em Python

Variâncias das features

  • As features do vinho têm variâncias bem diferentes!

  • A variância de uma feature mede a dispersão dos valores

feature     variance
alcohol         0.65
malic_acid      1.24
...
od280           0.50
proline     99166.71

Gráfico de dispersão de od280 vs malic_acid

Unsupervised Learning em Python

Variâncias das features

  • As features do vinho têm variâncias bem diferentes!

  • A variância de uma feature mede a dispersão dos valores

feature     variance
alcohol         0.65
malic_acid      1.24
...
od280           0.50
proline     99166.71

Gráfico de dispersão de od280 vs número da observação

Unsupervised Learning em Python

StandardScaler

  • No k-means: variância da feature = influência da feature

  • StandardScaler transforma cada feature para média 0 e variância 1

  • Dizemos que as features ficam “padronizadas”

Gráfico de dispersão de od280 padronizada vs proline padronizada

Unsupervised Learning em Python

sklearn StandardScaler

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(samples) StandardScaler(copy=True, with_mean=True, with_std=True)
samples_scaled = scaler.transform(samples)
Unsupervised Learning em Python

Métodos semelhantes

  • StandardScaler e KMeans têm métodos parecidos

  • Use fit() / transform() com StandardScaler

  • Use fit() / predict() com KMeans

Unsupervised Learning em Python

StandardScaler, depois KMeans

  • Precisamos de duas etapas: StandardScaler, depois KMeans

  • Use um pipeline do sklearn para combinar etapas

  • Os dados fluem de uma etapa para a próxima

Unsupervised Learning em Python

Pipelines combinam várias etapas

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
scaler = StandardScaler()
kmeans = KMeans(n_clusters=3)

from sklearn.pipeline import make_pipeline
pipeline = make_pipeline(scaler, kmeans)
pipeline.fit(samples)
Pipeline(steps=...)
labels = pipeline.predict(samples)
Unsupervised Learning em Python

Padronizar features melhora o cluster

Com padronização de features:

varieties  Barbera  Barolo  Grignolino
labels                                
0                0      59           3
1               48       0           3
2                0       0          65

Sem padronização foi bem ruim:

varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Unsupervised Learning em Python

Etapas de pré-processamento no sklearn

  • StandardScaler é uma etapa de “pré-processamento”

  • MaxAbsScaler e Normalizer são outros exemplos

Unsupervised Learning em Python

Vamos praticar!

Unsupervised Learning em Python

Preparing Video For Download...