Menu
CoddyTech

Forêt d’isolation

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

Les points atypiques sont faciles à isoler. Découpez les données au hasard, encore et encore, jusqu’à ce qu’un point se retrouve seul :

Le même nuage de points représenté deux fois, découpé par des coupes aléatoires grises. À gauche : un point éloigné dans le coin supérieur est isolé après 2 coupes. À droite : un point au milieu de la foule nécessite 8 coupes

Le point éloigné a nécessité 2 coupures, le point dense 8. Une forêt d’isolation calcule la moyenne des coupures sur 100 arbres aléatoires :

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

fit_predict renvoie -1 pour les lignes atypiques, 1 pour les autres. contamination est la proportion de lignes que tu t’attends à voir atypiques.

challenge icon

Défi

Moyen

Un port a enregistré 160 quarts de grue : le nombre de mouvements par heure et l’énergie par mouvement. Quels quarts étaient inhabituels ?

  1. Repère les quarts à l’aide d’une forêt d’isolation, contamination=0.03, random_state=0. Affiche le nombre comme ci-dessous.
  2. Représente les quarts normaux par des points étiquetés normal.
  3. Entoure ceux qui ont été signalés : s=150, facecolors="none", edgecolors="red", étiquetés flagged. Ajoute une légende et affiche le graphique.

Pour un autre port, avec 200 quarts :

Flagged: 6 of 200 shifts

Quarts de grue représentés par des points formant un nuage descendant : les grues plus rapides consomment moins d’énergie par mouvement, et six quarts isolés sont entourés en rouge, avec une légende

Coddy décrit ensuite ton graphique.

Essayez vous-même

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

# Une ligne par poste de travail d'une grue au port : vitesse et consommation d'énergie
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# Ne modifiez pas les lignes ci-dessous
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# É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