碎石圖 是什麼?
Scree Plot:碎石圖 的完整解釋
在主成分分析(PCA)中,以折線圖呈現各主成分解釋變異量的視覺化工具,用於判斷應保留的主成分數量。
碎石圖(Scree Plot)由 Raymond Cattell 於 1966 年首先提出,原本用於心理測量學的因子分析,後來成為主成分分析(PCA)與其他降維方法中不可或缺的視覺輔助工具。
背景:為什麼需要碎石圖
在主成分分析中,原始特徵被轉換為按解釋變異量降序排列的主成分(PC),每個主成分對應一個特徵值(Eigenvalue),代表它所解釋的總變異量大小。在實際應用中,我們不會保留所有主成分(保留全部等同不降維),而是選取前 k 個主成分來捕捉數據中最主要的信息,同時丟棄代表雜訊的低解釋力主成分。問題在於:應該保留幾個主成分(k = ?)碎石圖是回答這個問題的核心視覺工具。
碎石圖的構成
- X 軸:主成分編號(1, 2, 3, ...),按解釋變異量從大到小排列
- Y 軸:對應的特徵值(Eigenvalue)或累積/個別解釋變異比例(Explained Variance Ratio)
- 曲線形狀:通常呈現左側急降、右側趨平的「L 形」或「手肘形」
「碎石(Scree)」的比喻來自山地地形:左側的急降坡面代表含有信息的主成分,右側趨平的碎石堆代表雜訊主成分。
肘部法則(Elbow Method)
最常用的判斷策略:找到曲線從「急降」轉為「趨平」的轉折點(肘部),保留肘部之前(含肘部)的主成分。若曲線在第 3 個主成分後趨於平緩,則保留 3 個主成分。
但肘部法則存在主觀性:不同人對「肘部」的判斷可能不同,特別是曲線沒有明顯轉折點時。可搭配其他判斷標準:
其他選擇主成分數量的判斷標準
- Kaiser 準則(特徵值 > 1):在標準化數據的 PCA 中,保留特徵值大於 1 的主成分(因為每個原始變數的特徵值為 1,保留解釋力超過單一變數的主成分)。適合探索性分析,但可能保留過多主成分。
- 累積解釋變異比例門檻:保留累積解釋變異比例達到某一閾值(常見選擇為 80%、90%、95%)所需的最少主成分數。此方法直觀且有明確的業務意義(如「保留 90% 的數據信息」)。
- 平行分析(Parallel Analysis):模擬與原始數據相同規模的隨機數據的特徵值分布,保留特徵值顯著大於隨機數據的主成分。比 Kaiser 準則更嚴謹。
- 下游任務效能:直接在下游模型(如分類器)中比較不同 k 值的交叉驗證效能,以效能最佳的 k 值為準。
Python 實作範例
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
### pca = PCA()
pca.fit(X_scaled)
# 個別解釋變異比例
explained_variance_ratio = pca.explained_variance_ratio_
# 繪製碎石圖
plt.figure(figsize=(8, 5))
plt.plot(range(1, len(explained_variance_ratio)+1),
explained_variance_ratio, 'bo-')
plt.xlabel('主成分編號')
plt.ylabel('解釋變異比例')
plt.title('碎石圖(Scree Plot)')
# 同時繪製累積解釋變異曲線
cumulative = np.cumsum(explained_variance_ratio)
plt.plot(range(1, len(cumulative)+1), cumulative, 'r--', label='累積')
### plt.legend()
### plt.show()
使用場景
- PCA 降維:在特徵工程中選擇 PCA 的最佳維度,用於機器學習模型的輸入
- 因子分析(Factor Analysis):在心理測量、市場研究中確定潛在因素的數量
- 文字主題建模:LSA(Latent Semantic Analysis)中選擇主題數量
- 推薦系統(Collaborative Filtering):矩陣分解(SVD)的降秩選擇
常見誤解
- 碎石圖是輔助決策工具,不是唯一標準。最終的 k 值選擇應結合業務需求、下游效能與計算資源。
- 碎石圖只適用於線性降維方法(PCA、Factor Analysis)。非線性方法(t-SNE、UMAP)沒有對應的碎石圖。
- 碎石圖顯示的「轉折點」在實際數據中可能並不明顯,此時建議優先使用累積解釋變異比例(如保留 90%)作為更客觀的標準。