iPAS AI 應用規劃師 中級 科目一

PCA 降維後接 SVM,對這個作法哪個描述最合理?

原題 45

進行影像分類任務時,研究團隊嘗試利用主成分分析(Principal Component Analysis,PCA)將輸入特徵從 1024 維降至 100 維,並將降維後的資料輸入支持向量機(Support Vector Machine,SVM)模型進行訓練。關於此作法,下列哪一項描述最為合理?

白話

研究團隊做影像分類,把每張影像的特徵從 1024 維壓縮到 100 維(用 PCA,主成分分析,Principal Component Analysis),然後把壓縮後的資料送進 SVM(支持向量機,Support Vector Machine)訓練。

問你:對這個「PCA 降維後接 SVM」的作法,哪一個描述最合理?

點選你的答案。

01 總結

一句話總結

PCA 降維的核心效益是兩件事同時發生:維度從 1024 降到 100,計算量大幅下降(訓練更快),同時去除冗餘雜訊(降低過擬合風險)。這是選項 D 的描述,是對 PCA 最合理的概括。

02 情境

先感受問題:1024 維的資料餵進 SVM,會發生什麼事

假設「成大醫學影像實驗室」在做皮膚病變分類,每張皮膚影像壓平成一個 1024 維的特徵向量(假設 32×32 像素的灰階影像)。

直接把 1024 維的資料丟進 SVM 有兩個痛點:

痛點一:速度慢。SVM 在高維空間計算核函數(Kernel Function)的代價很高,1024 維的 10,000 筆資料,訓練可能要幾個小時。

痛點二:維度詛咒(Curse of Dimensionality)。維度越高,要有足夠覆蓋的資料量呈指數爆炸。資料不夠多時,高維空間裡的資料點稀疏,SVM 容易找到「完美切割訓練集但泛化差」的超平面,這就是過擬合。

這時候研究者想到:先用 PCA 把 1024 維壓成 100 維,再接 SVM。這樣有什麼效果?

PCA 找的是資料中變異量最大的方向(主成分),這些方向通常包含了資料的主要結構和信號,而把它們截留到 100 個維度,其實去掉的是那些變異量很小的維度,那些往往是雜訊。

03 對照

為什麼高維資料直接接 SVM 有問題

不做 PCA、直接用 1024 維資料訓練 SVM 的五個問題:

  1. 計算複雜度高:SVM 的時間複雜度大約是 O(n² × d),n 是樣本數,d 是維度。d 從 100 變 1024,計算量暴增 10 倍以上,訓練時間從幾分鐘變幾小時。
  2. 維度詛咒:高維空間裡,每兩個資料點之間的距離都差不多大(高維球的體積集中在殼),SVM 依賴距離和超平面的幾何概念在高維下效果打折。
  3. 冗餘特徵:1024 維中有很多特徵是高度相關的(例如相鄰像素的值往往差不多),這些冗餘資訊不提供新信號,但增加計算負擔。
  4. 雜訊影響大:高維資料中不重要的維度可能是雜訊,SVM 可能過度擬合這些雜訊,泛化效果差。
  5. 視覺化和診斷困難:1024 維的分類結果難以檢查和調試,PCA 降到 2-3 維後可以畫出來看資料結構,方便診斷。
04 解法

PCA 降到 100 維,幫 SVM 做了什麼

回到「成大醫學影像實驗室」。PCA 降到 100 維之後,對 SVM 的效益是這樣的:

效益一:訓練速度加快。維度從 1024 降到 100,縮小了約 10 倍,SVM 的計算代價大幅降低。實務上有時候從幾小時降到幾分鐘。

效益二:過擬合風險降低。PCA 保留的是變異量最大的主成分,去掉的是變異量小的維度(雜訊)。模型要記憶的「虛假特徵」變少,在測試集上的泛化效果通常更好。

1024 維直接訓練 SVM:訓練準確率 99%,測試準確率 82%(過擬合)
PCA 降到 100 維後:訓練準確率 93%,測試準確率 91%(泛化較好)

注意:PCA 降維並不保證「一定提升準確率」,因為 100 個主成分不一定包含了 SVM 最需要的判別信號。有時候 PCA 去掉的低變異量方向恰好是對分類最重要的方向,這種情況 PCA 反而可能讓準確率下降。

所以最合理的描述是:降維後「訓練更快」且「過擬合風險降低」,而不是「一定提升準確率」。

這就是選項 D 講的:降維後可降低訓練時間並減少過擬合(Overfitting)風險

技術版:PCA 的數學直觀與 SVM 核函數的維度關係

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

以下用程式碼呈現 PCA + SVM 的標準流程:

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

# 建立 PCA + SVM 的 Pipeline
pipeline = Pipeline([
    ("scaler", StandardScaler()),      # 先標準化(PCA 前必做)
    ("pca", PCA(n_components=100)),    # 從 1024 維降到 100 維
    ("svm", SVC(kernel="rbf", C=1.0)) # RBF 核 SVM 分類器
])

# 訓練
pipeline.fit(X_train, y_train)

# 評估
print(pipeline.score(X_test, y_test))
Step 1 純故事版
  1. 先標準化:讓各維度的數值範圍一致,PCA 才不會被值域大的維度主導
  2. PCA 降維:找出資料中變異量最大的 100 個方向,把 1024 維壓成 100 維
  3. SVM 分類:在 100 維空間裡找最優超平面,分類影像
Step 2 中文 ↔ 程式碼對照
故事程式碼
把各維度縮放到同一尺度StandardScaler()
找 100 個最重要的方向PCA(n_components=100)
用 RBF 核做非線性分類SVC(kernel="rbf")
把三步串成一個流程Pipeline([...])
訓練整個流程pipeline.fit(X_train, y_train)
Step 3 符號角色表
n_components=100
保留 100 個主成分(Principal Components)。主成分是資料中變異量從大到小排列的正交方向。
kernel="rbf"
RBF(Radial Basis Function)核,讓 SVM 能在降維後的空間做非線性分類。注意:非線性能力來自 SVM 的核函數,不是 PCA。
C=1.0
正則化參數,控制 SVM 對訓練錯誤的容忍度。C 越大越容易過擬合,C 越小越正則化。
StandardScaler
標準化工具,確保每個特徵均值為 0、標準差為 1。PCA 對量綱敏感,做 PCA 前必須先標準化。
Step 4 完整公式對應

PCA 的核心是特徵值分解(Eigenvalue Decomposition)。把資料矩陣 X 做共變異數矩陣 C = X^T X / (n-1),取前 k 個特徵向量(對應最大的 k 個特徵值),就是 k 個主成分方向。降維就是把原始資料投影到這 k 個方向上。

# 查看每個主成分解釋了多少變異量
import numpy as np
pca_fitted = pipeline.named_steps["pca"]
explained = pca_fitted.explained_variance_ratio_
print(f"前 100 個主成分解釋了 {np.sum(explained)*100:.1f}% 的總變異量")
# 例如:前 100 個主成分解釋了 92.3% 的總變異量
Step 5 自我複述

蓋住程式碼,說出 PCA + SVM 流程的三步驟:

  1. 標準化:讓各維度尺度一致
  2. PCA:找最重要的 100 個方向,壓縮維度
  3. SVM:在 100 維空間裡訓練分類器

再說出 PCA 的兩個效益:更快(維度小)、更不容易過擬合(去掉雜訊)。

05 陷阱

為什麼其他選項是錯的

APCA 保留的主成分必然能提升 SVM 的分類準確率

字面在說什麼

PCA 選出最重要的成分,用這些成分訓練 SVM,準確率一定比原始資料更高。

為什麼不對

「必然」這個詞讓選項 A 錯了。PCA 選的是變異量最大的方向,不是「對分類最有用」的方向。這兩件事不一樣。有時候變異量小的維度(被 PCA 去掉的),恰好包含了關鍵的分類信號。所以 PCA 降維有可能讓準確率上升,也可能讓準確率下降,取決於資料的特性。「必然提升」是錯的。

誰會選錯

認為「PCA 保留最重要的成分,去掉噪音,所以一定更好」的考生。PCA 保留「變異量最大」的成分,不等於保留「對下游任務最重要」的成分。這個細微差異很關鍵。

B使用原始高維資料通常更能保留資訊,因此 PCA 沒有實際意義

字面在說什麼

原始 1024 維的資料資訊最完整,降維一定會損失資訊,所以 PCA 沒用。

為什麼不對

高維資料確實資訊更完整,但不代表更多資訊對 SVM 更有益。維度詛咒(Curse of Dimensionality)讓高維資料反而難以學習。PCA 去掉的是低變異量的維度,這些維度通常是雜訊,去掉它們有助於降低過擬合。PCA 的實際意義非常大:節省訓練時間、減少過擬合、方便視覺化診斷。

誰會選錯

有「越多資訊越好」直覺的考生。在機器學習裡,「更多特徵」不等於「更好的泛化」,特別是特徵中有冗餘和雜訊時,降維反而有益。選項 B 忽略了維度詛咒和過擬合的問題。

CPCA 可讓 SVM 自動適用於非線性(Nonlinear)資料集

字面在說什麼

PCA 降維之後,原本線性分類器不能處理的非線性問題,SVM 就可以解決了。

為什麼不對

PCA 是線性變換,它只做旋轉和投影,不改變資料的線性/非線性特性。如果資料在原始空間是非線性的,PCA 之後仍然是非線性的。讓 SVM 能處理非線性資料的是 SVM 自身的核函數(Kernel Trick),例如 RBF 核、多項式核,和 PCA 沒有關係。

誰會選錯

把「PCA 做了複雜的變換」和「變換後資料性質改變了」混為一談的考生。PCA 的變換是線性正交投影,它改變的是座標系,不改變資料點之間的線性/非線性關係。非線性能力來自 SVM 的核函數,不來自 PCA。

06 變形

同個考點下次怎麼變形

變形 1 邊界

PCA 要保留幾個主成分才夠?怎麼決定?

直覺

保留越多越好,反正去掉的都是不重要的?

答案

常用方法是「解釋變異量比例(Explained Variance Ratio)」:累積到前 k 個主成分解釋了 90% 或 95% 的總變異量,就取 k。畫出累積解釋變異量曲線(Scree Plot),找「手肘點」(曲線開始趨緩的位置)也是常見做法。另一個方法是交叉驗證:對不同的 k 值做 5-fold CV,選出下游任務效能最好的 k。

變形 2 反例

PCA 降維一定要在 SVM 訓練之前做嗎?

直覺

PCA 是前處理步驟,一定要先做?

答案

PCA 必須在訓練集上 fit(學習主成分方向),然後用同樣的主成分方向 transform 測試集。絕對不能在訓練集 + 測試集合並後做 PCA,因為那樣測試集的資訊就洩漏到訓練流程了(Data Leakage)。正確做法:在 Pipeline 裡,PCA.fit_transform(X_train) → SVM.fit;然後 PCA.transform(X_test) → SVM.predict。sklearn 的 Pipeline 會自動做到這件事。

變形 3 升級版

深度學習時代,PCA 還有用嗎?

直覺

CNN 自己會學特徵表示,PCA 應該已經過時?

答案

仍然有用,但使用場景不同。在資料量小、計算資源有限、或需要可解釋性的場景,PCA + SVM 的組合仍然是可靠選擇(訓練快、不需要 GPU、特徵可解釋)。在大規模影像任務,CNN 的特徵提取能力遠超 PCA,但即使用 CNN,也可能在 CNN 的 feature vector 上再做 PCA,作為二次降維和視覺化工具。PCA 是工具箱裡的基礎工具,不會消失。

變形 4 跨領域

基因組學(Genomics)也用 PCA,目的和影像分類一樣嗎?

直覺

都是降維,目的應該差不多?

答案

目的不同,但機制相同。基因組學的資料常常是幾萬個基因特徵(高維),但樣本數可能只有幾百個(High-dimensional Low Sample Size,HDLSS)。PCA 在這裡有三個用途:一是降維到可訓練的維度;二是視覺化(把樣本投影到前兩個主成分做散點圖,看族群結構);三是識別混淆因素(如批次效應,Batch Effect)。和影像分類的「降維加速 + 去雜訊」目的有重疊,但視覺化和混淆因素診斷是基因組學獨特的應用。

變形 5 評估指標

怎麼知道 PCA 降維對下游 SVM 的效果「值不值得」?

直覺

比一下降維前後的準確率就知道了?

答案

至少比三個面向。效能:降維前後的 F1-score / AUC-ROC,看準確率有沒有顯著下降。效率:訓練時間的差異(通常降維後快很多)。泛化:訓練集和測試集的效能差距(差距縮小代表過擬合降低)。還可以畫「k(主成分數)vs 測試 F1」的曲線,找出最佳的 k。這三個指標一起看,才能判斷 PCA 降維是否「值得」。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二次 iPAS AI 應用規劃師 中級 科目一 第 45 題

查看官方原文 PDF