ML Learning Hub
غير مُشرفمتوسط

تحليل المكونات الرئيسية وتخفيض الأبعاد

إيجاد اتجاهات التباين الأقصى — ضغط المعلومات دون فقدانها

تحليل المكونات الرئيسية من الصفر: التحليل الطيفي لمصفوفة التباين والتباين المُفسَّر واختيار المكونات ومقارنة t-SNE/UMAP.

45 min
10 مخططات
7 المفاهيم المغطاة

المتطلبات الأساسية

Linear Algebra
Clustering

المفاهيم المغطاة

EigendecompositionVariance ExplainedCovariance MatrixWhiteningt-SNEUMAPScree Plot

الصيغ الرئيسية

التحلل الذاتي للتباين المشترك

تتحلل مصفوفة التباين المشترك إلى متجهات ذاتية V وقيم ذاتية Λ

إسقاط ACP

إسقاط البيانات الموسَّطة على أعلى k متجهات ذاتية — تمثيل k-بُعدي

التباين المُفسَّر

نسبة التباين الكلي الملتقَط بالمكوّن الرئيسي k

إعادة بناء ACP

إعادة بناء تقريب x من الرمز z منخفض الأبعاد — يقيس فقدان المعلومات

محاكاة تفاعلية

Loading visualization…
🎯

لعنة الأبعاد

motivation

مع 1000 ميزة، كل زوج من النقاط يكون شبه متساوي المسافة (ظاهرة 'تركيز القياس'). تنهار الخوارزميات القائمة على المسافة. تصوير البيانات عالية الأبعاد مستحيل. يستغرق التدريب وقتاً طويلاً والنماذج تُفرط في التعلم. تحل ACP هذا بإيجاد فضاء جزئي منخفض الأبعاد يلتقط معظم التباين — يُزيل الضوضاء ويُزيل ترابط الميزات ويُتيح التصور. صورة بـ10,000 بكسل غالباً تُضغط إلى 50 مكوناً ACP مع أقل من 5% خطأ إعادة بناء.

نتيجة 'فضاء الوجوه' الشهيرة: صور الوجوه البشرية تعيش في فضاء جزئي بـ~50 بُعداً ضمن فضاء من 50,000 بكسل. تجد ACP هذا الفضاء الجزئي.

💡

المنظور الهندسي

intuition

تخيّل سحابة من النقاط تبدو كإهليلج ممتد. تجد ACP أطول محور للإهليلج (CP1 — اتجاه الحد الأقصى للتباين)، ثم المحور العمودي الأطول التالي (CP2)، وهكذا. بالإسقاط على المكونات الرئيسية الأولى، نحتفظ بالأبعاد الأكثر 'انتشاراً' ونتجاهل المتضامة (عادةً ضوضاء). المكونات الرئيسية هي المتجهات الذاتية لمصفوفة تباين البيانات، مرتبةً بقيمها الذاتية (= التباين في كل اتجاه).

التحلل الذاتي لمصفوفة التباين

math

توسيط البيانات: X̃ = X - μ. حساب مصفوفة التباين p×p Σ = (1/n)X̃ᵀX̃. التحليل الطيفي: Σ = VΛVᵀ حيث V متعامدة معيارية وΛ قطرية بقيم ذاتية λ₁≥λ₂≥…≥λₚ. المتجه الذاتي الأول v₁ هو اتجاه أقصى تباين. عملياً، يستخدم scikit-learn SVD مباشرةً على X̃ (أكثر استقراراً عددياً).

معادلة المتجهات الذاتية — vₖ مكوّن رئيسي
🔬

اختيار عدد المكونات

deepdive

ارسم نسبة التباين التراكمي المُفسَّر. ترتفع المنحنى بسرعة أولاً ثم تتسطح. اختر k حيث تصل إلى 90-95% تباين تراكمي — هذا هو 'الكوع'. بديلاً، استخدم ACP كمعالجة مسبقة لنموذج لاحق: اضبط k كمعامل فائق بالتحقق المتقاطع. للتصور، استخدم دائماً k=2 أو k=3 بصرف النظر عن التباين المُفسَّر.

1

حساب explained_variance_ratio_ لكل مكوّن

2

رسم المجموع التراكمي — إيجاد k حيث cumsum ≥ 0.95

3

للتبييض (إزالة الترابط + تباين وحدوي): تعيين whiten=True

4

للمجموعات الكبيرة: استخدام IncrementalPCA (ميني-دفعة) أو TruncatedSVD (متفرق)

5

لا تطبق ACP قبل تقسيم التدريب/الاختبار — اضبط على بيانات التدريب فقط

⚙️

خوارزمية ACP

algorithm
1

توسيط البيانات: X̃ = X - mean(X, axis=0)

2

حساب SVD: X̃ = UΣVᵀ (مكافئ: التحليل الطيفي لـX̃ᵀX̃)

3

ترتيب المتجهات الذاتية بالقيم الذاتية تنازلياً

4

اختيار أعلى k متجهات ذاتية: V_k = V[:, :k]

5

الإسقاط: Z = X̃ @ V_k → تمثيل k-بُعدي

6

إعادة البناء: X̂ = Z @ V_k.T + mean → قياس خطأ إعادة البناء

</>

ACP مع scikit-learn

code
python38 lines
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

class="tok-comment"># ── Sample data ────────────────────────────────────────────────────────
X_raw, y = make_classification(n_samples=class="tok-num">400, n_features=class="tok-num">20,
                                n_informative=class="tok-num">8, random_state=class="tok-num">42)
X_train, X_test, _, _ = train_test_split(X_raw, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42)

class="tok-comment"># ── Fit PCA ────────────────────────────────────────────────────────
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)

class="tok-comment"># Fit full PCA first to inspect variance
pca_full = PCA().fit(X_scaled)
cumvar = np.cumsum(pca_full.explained_variance_ratio_)
k = np.argmax(cumvar >= class="tok-num">0.95) + class="tok-num">1
print(fclass="tok-str">"{k} components explain ≥class="tok-num">95% variance")

class="tok-comment"># Final PCA with chosen k
pca = PCA(n_components=k, random_state=class="tok-num">42)
X_pca = pca.fit_transform(X_scaled)          class="tok-comment"># fit on train only
X_test_pca = pca.transform(scaler.transform(X_test))

class="tok-comment"># ── Reconstruction error ───────────────────────────────────────────
X_reconstructed = pca.inverse_transform(X_pca)
recon_err = np.mean((X_scaled - X_reconstructed)**class="tok-num">2)
print(fclass="tok-str">"Reconstruction MSE: {recon_err:.4f}")

class="tok-comment"># ── 2D visualisation ───────────────────────────────────────────────
pca2 = PCA(n_components=class="tok-num">2)
X_2d = pca2.fit_transform(X_scaled)
plt.scatter(X_2d[:,class="tok-num">0], X_2d[:,class="tok-num">1], c=y, cmap=class="tok-str">'viridis', alpha=class="tok-num">0.7)
plt.xlabel(fclass="tok-str">"PC1 ({pca2.explained_variance_ratio_[class="tok-num">0]:.class="tok-num">1%})")
plt.ylabel(fclass="tok-str">"PC2 ({pca2.explained_variance_ratio_[class="tok-num">1]:.class="tok-num">1%})")
⚠️

مزالق ACP

pitfall

ACP طريقة خطية — لا تلتقط التشعبات غير الخطية. استخدم t-SNE أو UMAP لتقليل الأبعاد غير الخطي عند تصور البنى المعقدة. أيضاً: تُعظِّم ACP التباين لا التمييز — للتصنيف، غالباً تعطي التحليل التمييزي الخطي (LDA) فصلاً أفضل. أخيراً: المكونات الرئيسية غالباً غير قابلة للتفسير. إذا احتجت ميزات قابلة للتفسير، فضِّل ACP المتفرقة أو اختيار الميزات.

لا تضبط ACP على مجموعة البيانات الكاملة — اضبط على بيانات التدريب فقط وطبّق نفس التحويل على بيانات الاختبار. الضبط على المجموعة الكاملة يُسرِّب إحصائيات الاختبار إلى التدريب.

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.