Trova gli elementi insoliti
Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 47 di 51.
Un’ultima domanda: quali scansioni sono quelle anomale? Una foresta di isolamento assegna un punteggio a ogni scansione: più basso è il punteggio, più è insolita. Per prima cosa, i punteggi più alti, quelli più ordinari:
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 elenca i numeri di riga dal punteggio più basso in su, quindi, invertito, mette prima quelli più ordinari. Mostrali da X: tutti i 64 pixel.
Sfida
MedioIl finale. Il codice iniziale contiene tutto ciò che è stato fatto finora, e guess, il nome del cluster di ogni scansione.
- Addestra una foresta di isolamento su
X_small(contamination=0.02,random_state=0). Stampa quante scansioni segnala, quale cifra viene segnalata più spesso e quante di quelle hanno il nome del cluster corretto. - Disegna le 10 scansioni più strane, dalla più strana in poi: una galleria di 2 per 5 in
gray_r, con le rispettive cifre come titoli.
Con 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 scansUna galleria dei 7 più ordinari appare così:
La tua mostra le scansioni più strane. I cluster assegnano il nome corretto al 79.2% di tutte le scansioni: come si confrontano quelle strane? Hai esplorato 1,797 scansioni e non hai mai addestrato un modello su un'etichetta.
Provalo tu
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 «Observa los dígitos»: 1,797 imágenes de 64 píxeles, con valores de tinta de 0 a 16
digits = load_digits()
X = digits.data
y = digits.target
# De «Reduce con PCA»: 80% de la varianza en 13 números por imagen
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)
# De «Agrupa los dígitos»: 10 grupos, encontrados sin etiquetas
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)
# De «Nombra los grupos»: el dígito que da nombre al grupo de cada imagen (79.2% coincide con y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]
# Escribe tu código a continuación
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento non supervisionato
1Trovare gruppi
Apprendimento senza etichetteMisurare la similaritàK-Means a manoK-Means in scikit-learnRiepilogo: iscritti alla palestra4Clustering gerarchico
Unire passo dopo passoModelli agglomerativiDendrogrammiRiepilogo: razze canine7PCA nella pratica
Vedere 64 dimensioniComponenti come schemiComprimere e ricostruirePCA prima di un modelloRiepilogo: scanner facciale10Progetto: Esplorare le cifre
Osserva le cifreRiduci con PCARaggruppa le cifreDai un nome ai gruppiTrova gli elementi insoliti2Scelta di k
InerziaIl metodo del gomitoPunteggi silhouetteScala prima del clusteringRiepilogo: zone di consegnaEsercitati da solo: Compilatore Python online