Menu
CoddyTech

מציאת החריגים

חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 47 מתוך 51.

שאלה אחרונה: אילו סריקות הן החריגות? יער בידוד נותן ציון לכל סריקה, וככל שהציון נמוך יותר, כך היא מוזרה יותר. תחילה, הציונים הגבוהים ביותר — הסריקות השגרתיות ביותר:

עשר סריקות מסודרות של כתב יד בשתי שורות, השגרתיות ביותר בקבוצה: חמש ספרות 0 עגולות, שלוש ספרות 9, ספרה 8 וספרה 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 מציג את מספרי השורות מהציון הנמוך ביותר כלפי מעלה, כך שבסדר הפוך, הרגילים ביותר מופיעים ראשונים. הציגו אותם מתוך X: כל 64 הפיקסלים.

challenge icon

אתגר

בינוני

הגמר. קוד הפתיחה כולל את כל מה שנעשה עד כה, וגם את guess, שם האשכול של כל סריקה.

  1. התאימו יער בידוד ל־X_small (contamination=0.02, random_state=0). הדפיסו כמה סריקות הוא מסמן, איזו ספרה סומנה בתדירות הגבוהה ביותר, ולכמה מהסריקות האלה שם האשכול שלהן זיהה נכון את הספרה.
  2. ציירו את 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 הרגילות ביותר נראית כך:

עשר ספרות 7 בכתב יד בגלריה של 2 על 5, כל אחת עם הכותרת 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_]

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה בלתי מונחית

תרגלו בעצמכם: קומפיילר Python אונליין