Menu
CoddyTech

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:

Dieci scansioni ordinate di cifre scritte a mano, disposte in due righe, le più ordinarie del gruppo: cinque zeri tondeggianti, tre 9, un 8 e un 2

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.

challenge icon

Sfida

Medio

Il finale. Il codice iniziale contiene tutto ciò che è stato fatto finora, e guess, il nome del cluster di ogni scansione.

  1. 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.
  2. 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 scans

Una galleria dei 7 più ordinari appare così:

Dieci 7 scritti a mano in una galleria di 2 per 5, ognuno intitolato 7, tutti uguali: una barra in alto, una breve barra trasversale e un tratto verso il basso

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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online