Menu
CoddyTech

Repérer les intrus

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 47 sur 51.

Une dernière question : quelles sont les numérisations les plus inhabituelles ? Une forêt d’isolation attribue un score à chaque numérisation, et plus le score est bas, plus elle est étrange. D’abord, les scores les plus élevés, les plus ordinaires :

Dix numérisations soignées d’écriture manuscrite sur deux rangées, les plus ordinaires de l’ensemble : cinq 0 ronds, trois 9, un 8 et 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 liste les numéros de ligne du score le plus bas au plus élevé ; inversée, la plus ordinaire apparaît en premier. Affiche-les depuis X : les 64 pixels.

challenge icon

Défi

Moyen

Le final. Le code de départ contient tout ce qui a été fait jusqu’ici, ainsi que guess, le nom du cluster de chaque scan.

  1. Ajuste une forêt d’isolation sur X_small (contamination=0.02, random_state=0). Affiche combien elle signale, le chiffre signalé le plus souvent et combien de ces scans sont correctement nommés par leur cluster.
  2. Dessine les 10 scans les plus étranges, en commençant par le plus étrange : une galerie de 2 par 5 en gray_r, avec leurs chiffres pour titres.

Avec 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

Une galerie des 7 les plus ordinaires ressemble à ceci :

Dix 7 manuscrits dans une galerie de 2 par 5, chacun intitulé 7, tous semblables : une barre supérieure, une courte barre transversale et un trait descendant

La tienne montre les plus étranges. Les clusters nomment correctement 79.2% de tous les scans : comment les scans atypiques se comparent-ils ? Tu as exploré 1,797 scans et n’as jamais entraîné de modèle sur une étiquette.

Essayez vous-même

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 images de 64 pixels, avec des niveaux d’encre de 0 à 16
digits = load_digits()
X = digits.data
y = digits.target

# De Shrink with PCA : 80% de la variance résumée par 13 nombres par image
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# De Cluster the Digits : 10 groupes, trouvés sans étiquette
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

# De Name the Clusters : le chiffre qui donne son nom au groupe de chaque image (79.2% correspondent à y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne