Encontre os Diferentes
Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 47 de 51.
Uma última pergunta: quais digitalizações são as mais incomuns? Uma floresta de isolamento atribui uma pontuação a cada digitalização, e quanto menor a pontuação, mais estranha ela é. Primeiro, as pontuações mais altas, as mais comuns:
iso = IsolationForest(contamination=0.02, random_state=0)
flags = iso.fit_predict(X_small)
scores = iso.score_samples(X_small)
typical = np.argsort(scores)[::-1][:10]np.argsort lista os números das linhas da menor pontuação para a maior; invertida, a mais comum aparece primeiro. Mostre-as a partir de X: todos os 64 pixels.
Desafio
MédioO desafio final. O código inicial reúne tudo até aqui e guess, o nome do cluster de cada digitalização.
- Ajuste uma floresta de isolamento a
X_small(contamination=0.02,random_state=0). Imprima quantas digitalizações ela sinaliza, qual dígito é sinalizado com mais frequência e em quantas dessas o nome do cluster está correto. - Desenhe as 10 digitalizações mais estranhas, começando pela mais estranha: uma grade de 2 por 5 em
gray_r, com os dígitos como títulos.
Com contamination=0.01:
Flagged as odd: 18 of 1797 scans
Most often odd: 7 (10 scans)
Named right by their cluster: 11 of 18 odd scansUma grade com os 7s mais comuns fica assim:
A sua mostra as mais estranhas. Os clusters identificam corretamente 79,2% de todas as digitalizações: como se comparam as incomuns? Você explorou 1,797 digitalizações e nunca treinou com um rótulo.
Experimente você mesmo
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.ensemble import IsolationForest
# De Look at the Digits: 1,797 imagens de 64 pixels, intensidade da tinta de 0 a 16
digits = load_digits()
X = digits.data
y = digits.target
# De Shrink with PCA: 80% da variância em 13 números por imagem
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)
# De Cluster the Digits: 10 grupos, identificados sem rótulos
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)
# De Name the Clusters: o dígito que dá nome ao grupo de cada imagem (79.2% correspondem a y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]
# 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 entregaPratique por conta própria: Compilador de Python online