رؤية 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 إلى رقمين لكل صورة باستخدام 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
# من قياس التشابه: تطبع الرقمين المختارين اللذين يقع مركزاهما على أقرب مسافة في الخريطة
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")
# اكتب شيفرتك أدناه
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم غير الخاضع للإشراف
1اكتشاف المجموعات
التعلّم دون تسمياتقياس التشابهتنفيذ K-Means يدويًااستخدام K-Means في scikit-learnمراجعة: أعضاء النادي الرياضي7تحليل PCA عمليًا
رؤية 64 بُعدًاالمكوّنات بوصفها أنماطًاالضغط وإعادة البناءPCA قبل تدريب النموذجمراجعة: ماسح الوجوهتدرّب بنفسك: مترجم Python عبر الإنترنت