דחיסה ושחזור
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 31 מתוך 51.
ציוני הרכיבים של סריקה הם כמו מתכון: מתחילים מהסריקה הממוצעת, ואז מוסיפים כל תבנית כפול הציון שלה. inverse_transform משחזרת את המתכון בחזרה ל־64 פיקסלים:
pca = PCA(n_components=10).fit(X)
codes = pca.transform(X) # 10 מספרים לכל סריקה
rebuilt = pca.inverse_transform(codes) # שוב 64 פיקסליםהנה שלוש סריקות שנבנו מחדש ממספרים הולך וגדל:
מעט מספרים נותנים טשטוש סביב הספרה הממוצעת; כל רכיב נוסף משחזר פרטים. עשרים מספרים במקום 64 כבר נראים ברורים.
אתגר
בינוניעט חכם משדר כל ספרה בתור k מספרי PCA, שנקראים על ידי התוכנית. מה אובד?
- התאימו PCA עם
kרכיבים עלX. דחסו את כל הסריקות, ואז שחזרו אותן לתוךrebuilt. - הדפיסו את השורות שלמטה; השגיאה היא ההפרש המוחלט הממוצע מ־
X. - ציירו את הסריקה החדשה ביותר,
X[-1], עלaxs[0]ואת השחזור שלה עלaxs[1], שתיהן ב־gray_r. הציגו.
עבור 7:
Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739והוא מצייר את זה. לאחר מכן Coddy מתאר את הלוחות שלך:
נסו בעצמכם
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# 1,797 סריקות של 64 פיקסלים; הסריקה העדכנית ביותר של העט נמצאת בשורה האחרונה
digits = load_digits()
X = digits.data
k = int(input())
# אל תשנו את השורות שלמטה
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין