PCA

Basic

Principal Component Analysis (PCA) | วิธีคลาสสิกในการลดมิติ

まとめ
  • PCA หมุนระบบแกนเพื่อหา “องค์ประกอบหลัก” ที่อธิบายความแปรปรวนของข้อมูลได้มากที่สุด
  • ช่วยลดมิติ, ลด noise, และเตรียมข้อมูลให้โมเดลอื่น โดยไม่ต้องใช้ฉลากข้อมูล
  • ใช้ได้กับเมทริกซ์ co-variance หรือแก้ผ่าน SVD
  • มิติใหม่สามารถตีความได้จาก loading matrix

สูตรสำคัญ #

ให้ข้อมูลศูนย์กลาง \(X\) ขนาด \(n \times d\) คำนวณเมทริกซ์ \(\Sigma = \frac{1}{n} X^\top X\) แล้วแก้ปัญหา eigen

$$ \Sigma v_i = \lambda_i v_i, $$

โดย \(v_i\) คือองค์ประกอบหลักและ \(\lambda_i\) คือความแปรปรวนที่อธิบายได้

ตัวอย่าง Python #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.decomposition import PCA
from sklearn.datasets import load_wine

data = load_wine()
X = data.data
y = data.target

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

plt.figure(figsize=(6, 5))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap="tab10")
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("Wine dataset บน PCA 2 มิติ")
plt.grid(alpha=0.2)
plt.tight_layout()
plt.show()

print("สัดส่วนความแปรปรวน:", pca.explained_variance_ratio_)

การฉาย Wine dataset ด้วย PCA

เคล็ดลับ #

  • ทำมาตรฐานข้อมูลก่อน (Mean=0, Var=1) เพื่อไม่ให้ฟีเจอร์ขนาดใหญ่ครอบงำ
  • ใช้ Scree plot หรือ cumulative variance เพื่อตัดสินใจจำนวนองค์ประกอบ
  • หากจำนวนฟีเจอร์มากกว่าจำนวนจุด ให้ใช้ SVD เพื่อประหยัดการคำนวณ

เอกสารอ้างอิง #

  • Jolliffe, I. T. (2002). Principal Component Analysis. Springer.
  • scikit-learn developers. (2024). PCA. https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html