Avaliando um agrupamento

Unsupervised Learning em Python

Benjamin Wilson

Director of Research at lateral.io

Avaliando um agrupamento

  • Dá para checar a correspondência com, por ex., espécies do iris
  • ... mas e se não houver espécies para comparar?
  • Meça a qualidade de um agrupamento
  • Isso orienta quantos clusters buscar
Unsupervised Learning em Python

Iris: clusters vs. espécies

  • k-means encontrou 3 clusters nas amostras de iris
  • Os clusters correspondem às espécies?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Unsupervised Learning em Python

Tabela cruzada com pandas

  • Clusters vs. espécies é uma “tabela cruzada”
  • Use a biblioteca pandas
  • Dadas as espécies de cada amostra na lista species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Unsupervised Learning em Python

Alinhando rótulos e espécies

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Unsupervised Learning em Python

Crosstab de rótulos e espécies

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

Como avaliar um agrupamento se não houver informações de espécies?

Unsupervised Learning em Python

Medindo a qualidade do agrupamento

  • Usando só as amostras e seus rótulos de cluster

  • Um bom agrupamento tem clusters compactos

  • Amostras de cada cluster bem juntas

Unsupervised Learning em Python

Inércia mede a qualidade do agrupamento

  • Mede o quão espalhados estão os clusters (menor é melhor)
  • Distância de cada amostra ao centróide do seu cluster
  • Após fit(), disponível no atributo inertia_
  • k-means tenta minimizar a inércia ao escolher os clusters
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Unsupervised Learning em Python

O número de clusters

  • Agrupamentos do iris com diferentes números de clusters
  • Mais clusters → menor inércia
  • Qual é o melhor número de clusters?

Gráfico de linhas: número de clusters vs. inércia

Unsupervised Learning em Python

Quantos clusters escolher?

  • Um bom agrupamento tem clusters compactos (logo, baixa inércia)
  • ... mas não clusters demais!
  • Escolha o “cotovelo” no gráfico de inércia
  • Onde a inércia começa a cair mais devagar
  • Ex.: para iris, 3 é uma boa escolha

Gráfico de linhas: número de clusters vs. inércia

Unsupervised Learning em Python

Vamos praticar!

Unsupervised Learning em Python

Preparing Video For Download...