Menu
CoddyTech

Die Ausreißer finden

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

Eine letzte Frage: Welche Scans sind die ungewöhnlichen? Ein Isolation Forest bewertet jeden Scan, und je niedriger der Wert, desto ungewöhnlicher. Zuerst die höchsten Werte, also die gewöhnlichsten:

Zehn ordentliche handgeschriebene Scans in zwei Reihen, die gewöhnlichsten in der Menge: fünf runde 0en, drei 9en, eine 8 und eine 2

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 listet die Zeilennummern beginnend mit dem niedrigsten Wert auf, sodass nach dem Umkehren die gewöhnlichsten zuerst kommen. Zeige sie aus X: alle 64 Pixel.

challenge icon

Aufgabe

Mittel

Das Finale. Der Starter enthält alles bisher Erarbeitete und guess, den Clusternamen jedes Scans.

  1. Trainiere einen Isolation Forest auf X_small (contamination=0.02, random_state=0). Gib aus, wie viele Scans er markiert, welche Ziffer am häufigsten markiert wird und bei wie vielen davon der Clustername stimmt.
  2. Zeichne die 10 ungewöhnlichsten Scans, beginnend mit dem ungewöhnlichsten: eine Galerie mit 2 Reihen und 5 Spalten in gray_r, beschriftet mit den jeweiligen Ziffern.

Mit 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 scans

Eine Galerie der gewöhnlichsten 7er sieht so aus:

Zehn handgeschriebene 7er in einer Galerie mit 2 Reihen und 5 Spalten, jede mit 7 beschriftet und alle gleich: ein oberer Balken, ein kurzer Querbalken und ein nach unten verlaufender Strich

Deine zeigt die ungewöhnlichsten. Cluster benennen 79.2% aller Scans richtig: Wie schneiden die ungewöhnlichen ab? Du hast 1,797 Scans untersucht und nie mit einem Label trainiert.

Probier es selbst

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

# Aus Ziffern betrachten: 1,797 Scans mit je 64 Pixeln, Tintenwerte von 0 bis 16
digits = load_digits()
X = digits.data
y = digits.target

# Aus Mit PCA verkleinern: 80% der Varianz in 13 Zahlen pro Scan
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# Aus Ziffern gruppieren: 10 Cluster, ohne Labels gefunden
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

# Aus Cluster benennen: die Ziffer, nach der das Cluster jedes Scans benannt ist (79.2% stimmen mit y überein)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]

# 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