Menu
CoddyTech

Isolation Forest

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 35 von 51.

Ausreißer lassen sich leicht abtrennen. Teile die Daten immer wieder zufällig, bis ein Punkt allein steht:

Dasselbe Streudiagramm zweimal, aufgeteilt durch graue zufällige Schnitte. Links: Ein weit entfernter Punkt in der oberen Ecke steht nach 2 Schnitten allein. Rechts: Ein Punkt mitten in der Gruppe benötigt 8 Schnitte

Der abgelegene Punkt benötigte 2 Schnitte, der dicht liegende 8. Ein Isolation Forest mittelt die Schnitte über 100 zufällige Bäume:

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

fit_predict gibt -1 für auffällige Zeilen und 1 für den Rest zurück. contamination ist der Anteil der Zeilen, von denen du erwartest, dass sie auffällig sind.

challenge icon

Aufgabe

Mittel

Ein Hafen erfasste 160 Kranschichten: Bewegungen pro Stunde und Energie pro Bewegung. Welche Schichten waren ungewöhnlich?

  1. Markiere die Schichten mit einem Isolation Forest, contamination=0.03, random_state=0. Gib die Anzahl wie unten aus.
  2. Stelle die normalen Schichten als Punkte dar, beschriftet mit normal.
  3. Kreise die markierten Schichten ein: s=150, facecolors="none", edgecolors="red", beschriftet mit flagged. Füge eine Legende hinzu und zeige das Diagramm an.

Für einen anderen Hafen mit 200 Schichten:

Flagged: 6 of 200 shifts

Kranschichten als Punkte in einer abfallenden Wolke: Schnellere Kräne verbrauchen weniger Energie pro Bewegung, und sechs vereinzelte Schichten sind rot eingekreist; mit Legende

Coddy beschreibt dann dein Diagramm.

Probier es selbst

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

# Eine Zeile pro Kranschicht im Hafen: Geschwindigkeit und Energieverbrauch
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# Ändere die folgenden Zeilen nicht
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unüberwachtes Lernen

Übe selbstständig: Online-Python-Compiler