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:
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.
Desafío
IntermedioEl final. El código inicial contiene todo lo visto hasta ahora y guess, el nombre del clúster de cada escaneo.
- 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. - 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 scansUna galería de los 7 más comunes se ve así:
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
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje no supervisado
1Encontrar grupos
Aprender sin etiquetasMedir la similitudK-Means a manoK-Means en scikit-learnRepaso: miembros del gimnasio7PCA en la práctica
Visualizar 64 dimensionesComponentes como patronesComprimir y reconstruirPCA antes de un modeloRepaso: escáner facial10Proyecto: Explorador de dígitos
Observa los dígitosReduce con PCAAgrupa los dígitosPon nombre a los gruposEncuentra los diferentes2Elegir k
InerciaEl método del codoPuntuaciones de siluetaEscalar antes de agruparRepaso: zonas de entrega3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de téPractica por tu cuenta: Compilador de Python online