מציאת החריגים
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 47 מתוך 51.
שאלה אחרונה: אילו סריקות הן החריגות? יער בידוד נותן ציון לכל סריקה, וככל שהציון נמוך יותר, כך היא מוזרה יותר. תחילה, הציונים הגבוהים ביותר — הסריקות השגרתיות ביותר:
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 מציג את מספרי השורות מהציון הנמוך ביותר כלפי מעלה, כך שבסדר הפוך, הרגילים ביותר מופיעים ראשונים. הציגו אותם מתוך X: כל 64 הפיקסלים.
אתגר
בינוניהגמר. קוד הפתיחה כולל את כל מה שנעשה עד כה, וגם את guess, שם האשכול של כל סריקה.
- התאימו יער בידוד ל־
X_small(contamination=0.02,random_state=0). הדפיסו כמה סריקות הוא מסמן, איזו ספרה סומנה בתדירות הגבוהה ביותר, ולכמה מהסריקות האלה שם האשכול שלהן זיהה נכון את הספרה. - ציירו את 10 הסריקות החריגות ביותר, מהחריגה ביותר והלאה: גלריה של 2 על 5 ב־
gray_r, עם הספרות שלהן ככותרות.
עם 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גלריה של הספרות 7 הרגילות ביותר נראית כך:
שלכם מציגה את הסריקות החריגות ביותר. האשכולות מזהים נכון 79.2% מכל הסריקות: איך החריגות משתוות אליהן? בחנתם 1,797 סריקות ולא אימנתם אף פעם על תווית.
נסו בעצמכם
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
# מתוך התבוננות בספרות: 1,797 סריקות של 64 פיקסלים, ערכי דיו מ-0 עד 16
digits = load_digits()
X = digits.data
y = digits.target
# מתוך צמצום באמצעות PCA: 80% מהשונות ב-13 מספרים לכל סריקה
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)
# מתוך קיבוץ הספרות: 10 אשכולות, שנמצאו ללא תוויות
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)
# מתוך מתן שמות לאשכולות: הספרה שעל שמה נקרא האשכול של כל סריקה (79.2% תואמים ל-y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין