Menu
CoddyTech

Encuentra los diferentes

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 47 de 51.

Una última pregunta: ¿cuáles son los escaneos extraños? Un bosque de aislamiento asigna una puntuación a cada escaneo; cuanto más baja es la puntuación, más extraño es. Primero, las puntuaciones más altas, las más normales:

Diez escaneos ordenados de números escritos a mano en dos filas, los más normales del conjunto: cinco ceros redondos, tres nueves, un ocho y un dos

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 enumera los números de fila desde la puntuación más baja hasta la más alta, así que, al invertir el orden, los más comunes aparecen primero. Muéstralos desde X: los 64 píxeles.

challenge icon

Desafío

Intermedio

El final. El código inicial contiene todo lo visto hasta ahora y guess, el nombre del clúster de cada escaneo.

  1. Entrena un bosque de aislamiento con X_small (contamination=0.02, random_state=0). Imprime cuántos marca, qué dígito se marca con mayor frecuencia y a cuántos de esos les asigna correctamente el nombre del clúster.
  2. Dibuja los 10 escaneos más extraños, empezando por el más extraño: una galería de 2 por 5 en gray_r, con sus dígitos como títulos.

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 galería de los 7 más comunes se ve así:

Diez 7 escritos a mano en una galería de 2 por 5, cada uno con el título 7, todos iguales: una barra superior, una barra transversal corta y un trazo hacia abajo

La tuya muestra los más extraños. Los clústeres asignan el nombre correcto al 79.2% de todos los escaneos: ¿cómo se comparan los extraños? Exploraste 1,797 escaneos y nunca entrenaste con una etiqueta.

Pruébalo tú mismo

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 Pon nombre a 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online