Menu
CoddyTech

Isolation Forest

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 35 di 51.

I punti anomali sono facili da isolare. Suddividi i dati a caso, ancora e ancora, finché un punto rimane da solo:

Lo stesso diagramma a dispersione mostrato due volte, suddiviso da tagli casuali grigi. A sinistra: un punto lontano nell'angolo in alto rimane isolato dopo 2 tagli. A destra: un punto al centro del gruppo ha bisogno di 8 tagli

Il punto più lontano ha richiesto 2 tagli, quello affollato 8. Una foresta di isolamento calcola la media dei tagli su 100 alberi casuali:

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

fit_predict restituisce -1 per le righe anomale, 1 per le altre. contamination è la proporzione di righe che ti aspetti siano anomale.

challenge icon

Sfida

Medio

Un porto ha registrato 160 turni di gru: spostamenti all’ora e consumo energetico per spostamento. Quali turni erano insoliti?

  1. Individua i turni anomali con una foresta di isolamento, contamination=0.03, random_state=0. Stampa il conteggio come sotto.
  2. Mostra i turni normali come punti, con etichetta normal.
  3. Cerchia quelli segnalati: s=150, facecolors="none", edgecolors="red", con etichetta flagged. Aggiungi una legenda e visualizza il grafico.

Per un altro porto, con 200 turni:

Flagged: 6 of 200 shifts

Turni delle gru rappresentati come punti in una nuvola discendente: le gru più veloci consumano meno energia per spostamento e sei turni isolati sono cerchiati in rosso, con una legenda

Coddy descrive poi il tuo grafico.

Provalo tu

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

# Una riga per ogni turno delle gru al porto: velocità e consumo energetico
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# Non modificare le righe seguenti
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# Scrivi il tuo codice qui sotto
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