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:
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.
Aufgabe
MittelDas Finale. Der Starter enthält alles bisher Erarbeitete und guess, den Clusternamen jedes Scans.
- 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. - 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 scansEine Galerie der gewöhnlichsten 7er sieht so aus:
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
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
1Gruppen finden
Lernen ohne LabelsÄhnlichkeit messenK-Means von HandK-Means mit scikit-learnRückblick: Fitnessstudiomitglieder4Hierarchisches Clustering
Schrittweises ZusammenführenAgglomerative ModelleDendrogrammeZusammenfassung: Hunderassen7PCA in der Praxis
64 Dimensionen sehenKomponenten als MusterKomprimieren und rekonstruierenPCA vor einem ModellRückblick: Gesichtsscanner10Projekt: Ziffern erkunden
Die Ziffern ansehenMit PCA verkleinernDie Ziffern gruppierenDie Gruppen benennenDie Ausreißer finden2k wählen
TrägheitDie Elbow-MethodeSilhouettenwerteVor dem Clustering skalierenRückblick: LieferzonenÜbe selbstständig: Online-Python-Compiler