Menu
CoddyTech

Znajdź te nietypowe

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 47 z 51.

Ostatnie pytanie: które skany są nietypowe? Las izolacyjny przypisuje każdemu skanowi wynik — im niższy wynik, tym bardziej nietypowy skan. Najpierw najwyższe wyniki, czyli najbardziej typowe skany:

Dziesięć starannie napisanych skanów w dwóch rzędach, najbardziej typowych w zestawie: pięć zaokrąglonych zer, trzy dziewiątki, ósemka i dwójka

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 wyświetla numery wierszy od najniższego wyniku wzwyż, więc po odwróceniu kolejności jako pierwsze pojawiają się najbardziej zwyczajne. Wyświetl je z X: wszystkie 64 piksele.

challenge icon

Wyzwanie

Średni

Finał. Kod startowy zawiera wszystko, co było do tej pory, a także guess — nazwę klastra dla każdego skanu.

  1. Dopasuj las izolacyjny do X_small (contamination=0.02, random_state=0). Wypisz, ile skanów oznacza jako nietypowe, która cyfra jest oznaczana najczęściej i w ilu przypadkach ich klastry poprawnie ją nazwały.
  2. Narysuj 10 najdziwniejszych skanów, zaczynając od najdziwniejszego: galerię 2 na 5 w gray_r, z tytułami zawierającymi cyfry.

Przy 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

Galeria najbardziej typowych siódemek wygląda tak:

Dziesięć odręcznie napisanych siódemek w galerii 2 na 5, każda z tytułem 7, wszystkie podobne: górna kreska, krótka poprzeczka i kreska w dół

Twoja pokazuje najdziwniejsze skany. Klastry poprawnie nazywają 79.2% wszystkich skanów: jak wypadają te nietypowe? Zbadałeś 1,797 skanów i nigdy nie trenowałeś na etykiecie.

Spróbuj swoich sił

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

# Z „Look at the Digits”: 1,797 obrazów po 64 piksele, intensywność od 0 do 16
digits = load_digits()
X = digits.data
y = digits.target

# Z „Shrink with PCA”: 80% wariancji w 13 liczbach na obraz
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# Z „Cluster the Digits”: 10 klastrów wyznaczonych bez etykiet
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

# Z „Name the Clusters”: cyfra, którą nazwano klaster każdego obrazu (79.2% zgodności z y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]

# Wpisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online