PCA.md

主成分分析(PCA, Principal Component Analysis)是一種常用於降維的線性方法,能將高維資料轉換為較低維的表示,保留大部分變異性。


一、PCA 原理概述

  • 目標:從原始特徵中找出能解釋資料變異最多的方向(主成分)。

  • 特性:主成分彼此正交(無關)、依變異量排序。

  • 用途:資料視覺化、降維、去除共線性、加速模型訓練。


二、步驟流程

  1. 標準化資料(使平均為 0、變異為 1)

  2. 計算共變異數矩陣

  3. 求出特徵值與特徵向量

  4. 依特徵值排序,選取前 $k$ 個主成分

  5. 投影原始資料至新主成分空間


三、使用 scikit-learn 實作 PCA

1. 基本降維與視覺化

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import pandas as pd

# 載入資料
iris = load_iris()
X = iris.data
y = iris.target

# 建立 PCA 模型並降為 2 維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 繪圖
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("PCA on Iris Dataset")
plt.show()

2. 解釋變異比例

print(pca.explained_variance_ratio_)
print("累積貢獻率:", sum(pca.explained_variance_ratio_))

四、非 scikit-learn 傳統實作

以下是純 NumPy 的 PCA 實作,展示其數學背景:

import numpy as np
from sklearn.datasets import load_iris

X = load_iris().data

# 1. 資料標準化
X_meaned = X - np.mean(X, axis=0)

# 2. 計算共變異矩陣
cov_mat = np.cov(X_meaned, rowvar=False)

# 3. 計算特徵值與特徵向量
eigen_vals, eigen_vecs = np.linalg.eigh(cov_mat)

# 4. 排序特徵值與特徵向量(由大至小)
sorted_index = np.argsort(eigen_vals)[::-1]
sorted_eigenvecs = eigen_vecs[:, sorted_index]

# 5. 選取前兩個主成分
n_components = 2
eigenvector_subset = sorted_eigenvecs[:, :n_components]

# 6. 投影至新空間
X_reduced = np.dot(X_meaned, eigenvector_subset)

此實作流程與 PCA 原理完全對應,可用於了解數學計算細節或自訂流程。


五、參數說明

參數
說明

n_components

降維維度數或保留變異百分比

whiten=True

將主成分正規化(常用於影像)

svd_solver

使用的特徵值分解方式(auto, full 等)


六、應用場景

  • 圖像處理(如臉部辨識、影像壓縮)

  • 基因表達資料視覺化與降維

  • 資料預處理以解決特徵共線性問題

  • 作為其他模型(如 LDA、SVM)的前置降維步驟


PCA 是資料科學與機器學習中常見的資料轉換工具之一,理解其數學背景與應用情境有助於更有效地處理高維資料。

Last updated