לראות 64 ממדים
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 29 מתוך 51.
בפרק הזה ניישם את PCA על ספרות בכתב יד. בסופו תצמצמו סריקה לכמה מספרים ותבנו אותה מחדש:
ראשית, הסתכלו. סריקה היא בגודל 64 פיקסלים, ואין תרשים עם 64 צירים, לכן PCA מצמצם אותם ל־2:
digits = load_digits()
X = digits.data
y = digits.target
points = PCA(n_components=2).fit_transform(X)
for d in range(10):
ax.scatter(points[y == d, 0], points[y == d, 1], label=str(d))אין כאן מנרמל: לכל פיקסל אותה יחידה, דיו מ־0 עד 16.
PCA לא ראה את y; הוא רק צובע את הנקודות. ובכל זאת, כל ספרה מתקבצת באזור משלה: המבנה היה בפיקסלים.
אתגר
בינוניאפליקציית כתב יד לילדים רוצה לדעת אילו ספרות ילדים עלולים לבלבל ביניהן. התוכנית קוראת כמה ספרות שהוקלדו יחד כמו 358 לתוך chosen.
- צמצמו את כל 1,797 הסריקות ל-2 מספרים לכל אחת באמצעות PCA, לתוך
points. - הציגו בתרשים פיזור את הסריקות של כל ספרה שנבחרה, עם תווית של הספרה. הוסיפו מקרא והציגו את התרשים.
- קראו ל-
report_closest(points, y, chosen).
עבור 046, התוכנית מדפיסה:
Closest on the map: 4 and 6 (13.6 apart)ומציירת את התרשים הזה. לאחר מכן Coddy מתאר את התרשים שלכם:
נסו בעצמכם
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# מתוך Measuring Similarity: מדפיס את שתי הספרות שנבחרו שמרכזיהן הקרובים ביותר זה לזה במפה
def report_closest(points, y, chosen):
best = -1
for i in range(len(chosen)):
for j in range(i + 1, len(chosen)):
a = points[y == chosen[i]].mean(axis=0)
b = points[y == chosen[j]].mean(axis=0)
dist = np.sqrt(((a - b) ** 2).sum())
if best == -1 or dist < best:
best = dist
pair = (chosen[i], chosen[j])
print(f"Closest on the map: {pair[0]} and {pair[1]} ({best:.1f} apart)")
# 1,797 סריקות: 64 פיקסלים לכל אחת ב-X, הספרה המצוירת ב-y
digits = load_digits()
X = digits.data
y = digits.target
# הספרות להשוואה, מוקלדות ברצף כמו 358
chosen = []
for ch in input():
chosen.append(int(ch))
# אין לשנות את השורות שלהלן
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין