AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
16/100 第二週:資料處理與特徵工程
16. PCA 降維技術 📉 壓縮數據維度,保留核心資訊,提升計算效率!
PCA(主成分分析,Principal Component Analysis)是一種降維技術,能夠將高維數據轉換成低維數據,保留主要資訊,同時去除冗餘特徵,提高機器學習模型的運算效率。
________________________________________
🔍 為什麼要使用 PCA?
✔ 解決高維數據問題(Curse of Dimensionality)
✔ 提高計算速度,減少計算成本
✔ 去除特徵之間的共線性(Collinearity)
✔ 使數據更容易視覺化
________________________________________
1️⃣ PCA 的基本概念
PCA 會找到數據中變異性最大的方向(主成分),並將數據投影到這些方向上,以達到降維的目的。
PCA 的核心步驟
(1) 標準化數據(讓每個特徵的均值為 0,標準差為 1)
(2) 計算共變異數矩陣(衡量變數之間的關係)
(3) 計算特徵值和特徵向量(找出最重要的方向)
(4) 選擇主成分(根據解釋方差比,選擇保留的維度)
(5) 轉換數據(將原始數據投影到新的主成分空間)
________________________________________
2️⃣ PCA 如何選擇維度?
📊 解釋方差(Explained Variance)
PCA 會計算每個主成分能解釋多少變異性(資訊量),通常會選擇解釋方差累積超過 95% 的主成分數量。
🔹 選擇保留的主成分數 k:
• 累積解釋方差比 > 95%(通常足夠保留大部分資訊)
• 使用「肘部法則」(Elbow Method)找到最佳降維點
________________________________________
3️⃣ PCA 在 Python 中的應用
我們使用 sklearn.decomposition.PCA 來實作 PCA。
✅ (1) 降維至 2D 進行可視化
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 生成隨機數據(5 個特徵)
np.random.seed(42)
X = np.random.rand(100, 5)
# 標準化數據
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 應用 PCA,降維至 2 維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 繪製散點圖
plt.scatter(X_pca[:, 0], X_pca[:, 1], alpha=0.7)
plt.xlabel("主成分 1")
plt.ylabel("主成分 2")
plt.title("PCA 降維後的數據")
plt.show()
📌 結果:數據點被投影到 2D 空間,方便可視化分析。
________________________________________
✅ (2) 確定最佳降維數
python
# 取得每個主成分的解釋方差比
explained_variance_ratio = pca.explained_variance_ratio_
# 計算累積解釋方差
cumulative_variance = np.cumsum(explained_variance_ratio)
# 繪製累積解釋方差圖
plt.plot(range(1, len(cumulative_variance) + 1), cumulative_variance, marker='o')
plt.axhline(y=0.95, color='r', linestyle='--')
plt.xlabel('主成分數量')
plt.ylabel('累積解釋方差')
plt.title('PCA 主成分選擇')
plt.show()
📌 結果:當累積解釋方差超過 95%,就可以選擇該維度作為最終降維數。
________________________________________
✅ (3) 使用 PCA 降維並應用於機器學習
假設我們要用 PCA 降維後的數據來訓練機器學習模型(如邏輯回歸)。
python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 產生目標變數(0 或 1)
y = np.random.randint(0, 2, size=100)
# 分割訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
# 訓練模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"PCA 降維後的模型準確率: {accuracy:.2f}")
📌 結果:透過 PCA 降維後,仍能保持一定的準確度,同時減少計算成本。
________________________________________
4️⃣ PCA 的優缺點
🎯 優點
✅ 降低維度,提升運算效率
✅ 減少共線性(Collinearity)問題
✅ 適合數據視覺化(2D, 3D 可視化分析)
✅ 保留最重要的資訊,減少不重要的噪音
⚠ 缺點
❌ 特徵解釋性降低(PCA 轉換後的數據不再有直觀的物理意義)
❌ 只適用於線性變換(若數據關係非線性,PCA 效果不佳,需考慮 t-SNE 或 UMAP)
❌ 需要標準化數據(如果數據範圍差異大,PCA 可能會受到影響)
________________________________________
5️⃣ PCA vs. 其他降維方法
在高維數據的降維與可視化中,不同方法各有其適用場景與特點。
PCA(主成分分析)是一種線性降維技術,能有效解決共線性問題,特別適用於數據分佈接近高斯分佈的情況。
若是分類任務,則可以選擇 LDA(線性判別分析),它考慮類別標籤,能強化不同類別之間的區分度,適合用於監督學習。
當目的是數據視覺化時,t-SNE 是一個強大的工具,能將高維數據有效映射到 2D 或 3D 空間,便於觀察數據分佈,但由於過於注重局部結構,並不適合作為機器學習模型的降維方法。
UMAP 則提供比 t-SNE 更快的性能,同樣適用於高維數據的非線性降維與視覺化,能更好地保持數據的全局結構。因此,選擇降維方法時,應根據數據特性與應用需求做出最合適的決策。
________________________________________
6️⃣ PCA 何時使用?
✅ 數據維度過高,運算太慢(如基因數據、圖像數據)
✅ 特徵之間高度相關,存在多重共線性問題
✅ 希望在 2D 或 3D 空間中可視化數據
✅ 提升機器學習模型效能,減少過擬合風險
❌ 不適用於非線性數據(若數據非線性關係,考慮 t-SNE 或 UMAP)
________________________________________
📌 結論
✨ PCA 是一種強大的降維工具,可以壓縮數據維度,提高計算效率,同時保留最重要的信息。
🚀 應用 PCA 可以減少冗餘數據,解決共線性問題,並提升機器學習模型的效能!
________________________________________
💡 進階建議: 如果你的數據是非線性結構,可以考慮:
• Kernel PCA(適用於非線性數據)
• t-SNE、UMAP(適用於數據可視化)
這樣,你就能更靈活地處理不同類型的高維數據!🔥