Menu
CoddyTech

Isolation Forest

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

Los puntos atípicos son fáciles de aislar. Divide los datos al azar, una y otra vez, hasta que un punto quede aislado:

El mismo diagrama de dispersión dos veces, dividido por cortes aleatorios grises. Izquierda: un punto lejano en la esquina superior queda aislado después de 2 cortes. Derecha: un punto en medio del grupo necesita 8 cortes

El punto más lejano necesitó 2 cortes; el más concurrido, 8. Un bosque de aislamiento promedia los cortes de 100 árboles aleatorios:

from sklearn.ensemble import IsolationForest
forest = IsolationForest(contamination=0.02, random_state=0)
flags = forest.fit_predict(X)

fit_predict da -1 para las filas atípicas y 1 para el resto. contamination es la proporción de filas que esperas que sean atípicas.

challenge icon

Desafío

Intermedio

Un puerto registró 160 turnos de grúa: movimientos por hora y energía por movimiento. ¿Qué turnos fueron extraños?

  1. Marca los turnos con un bosque de aislamiento, contamination=0.03, random_state=0. Imprime el recuento como se muestra a continuación.
  2. Representa los turnos normales como puntos con la etiqueta normal.
  3. Rodea los marcados: s=150, facecolors="none", edgecolors="red", con la etiqueta flagged. Añade una leyenda y muestra el gráfico.

Para otro puerto, con 200 turnos:

Flagged: 6 of 200 shifts

Turnos de grúa representados como puntos en una nube descendente; las grúas más rápidas consumen menos energía por movimiento, y seis turnos aislados están rodeados en rojo, con una leyenda

Coddy describe después tu gráfico.

Pruébalo tú mismo

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

# Una fila por turno de grúa en el puerto: velocidad y consumo de energía
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# No cambies las líneas siguientes
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# 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