PCA.md
主成分分析(PCA, Principal Component Analysis)是一種常用於降維的線性方法,能將高維資料轉換為較低維的表示,保留大部分變異性。
一、PCA 原理概述
目標:從原始特徵中找出能解釋資料變異最多的方向(主成分)。
特性:主成分彼此正交(無關)、依變異量排序。
用途:資料視覺化、降維、去除共線性、加速模型訓練。
二、步驟流程
標準化資料(使平均為 0、變異為 1)
計算共變異數矩陣
求出特徵值與特徵向量
依特徵值排序,選取前 $k$ 個主成分
投影原始資料至新主成分空間
三、使用 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