食品分析實驗 · W14
← → / 空白鍵切頁 · F 全螢幕 · 點兩側翻頁
食品分析實驗 · W14

PLS 定量 II:VIP、PLS-DA 與離群值

Variable Importance in Projection, PLS-DA, and Outlier Diagnostics
食品分析實驗 · 4 小時課程
本週以電腦教室數據分析為主:VIP 變數重要性 · 分類與混淆矩陣 · Hotelling T²/Q 離群值
VIPVIP>1篩選PLS-DA邏輯斯迴歸混淆矩陣Hotelling T²Q殘差Apply DomainOrange OR14Colab NB12
開始前,先想一個問題
模型說這個波長最重要——
你相信嗎?
一個真實發生過的故事(已匿名):準備這門課的教材時,有一支計算 VIP 的腳本裡, 迴圈內多寫了一個 .sum(),把「每個波長各自的貢獻」提早壓成同一個數字—— 結果 228 個波長全部得到一模一樣的 VIP 值,腳本印出來的「VIP 前 20 名波長」其實完全沒有意義。

其實有三個簡單的檢查就能抓到這個 bug:

🟰
VIP 值全部一樣
228 個波長理應有高有低,全部相同本身就是警訊
➗
mean(VIP²) ≠ 1
VIP 的定義保證「全部波長的 VIP² 平均=1」,算出來不是 1 就代表公式或係數錯了
🧪
高 VIP 對不上化學
「最重要」的波段如果跟已知的官能基吸收完全兜不起來,該懷疑而不是照抄

今天這堂課,我們用會驗證自己的方法,重新走一遍 VIP、分類、離群值判斷。

W14 / VIP + PLS-DA + MODEL DOMAIN

先驗算 VIP,再判讀分類與模型適用性

完整旁白與字幕;使用 NB12 三組模擬光譜。 獨立播放器與下載 · 互動實驗

W14 / PREDICT · OBSERVE · EXPLAIN

六幕互動:VIP、分類與 T²/Q 診斷

今天的學習目標

上完 W14,你應該會…

入門 不用寫程式:Orange OR14(PCA+邏輯斯迴歸分類、Apply Domain 找模型外樣品) 進階 Colab NB12(VIP、PLS-DA、Q 殘差)

📈 VIP 變數重要性
進階 NB12
  • 說出 VIP 在算什麼:各波長跨所有 LV、用 SSY(各 LV 解釋的 y 變異)加權的重要性;VIP>1=高於平均
  • 分辨 VIP(重不重要,永遠為正) 與迴歸係數 b(方向,有正有負)
  • 用三個檢查驗證 VIP:全部相同?mean(VIP²)=1?對得上化學?
  • 用篩選時沒用過的測試集算 RMSEP 比較篩選前後,避免選擇偏誤(進階 NB12)
🎯 分類與混淆矩陣
入門 Orange 進階 NB12
  • 說明 PLS-DA 如何用 one-hot+argmax 把分類變成迴歸
  • 用 Orange PCA+邏輯斯迴歸分類並讀混淆矩陣(準確率、敏感度、特異度)
🚨 離群值診斷
入門 Orange 進階 NB12
  • 分辨 T²(平面內離中心多遠) 與 Q(離平面多遠),並會算簡單例子
  • 看懂 T² vs Q 影響圖的 95% 界限;用 Orange Apply Domain 找模型外的樣品
  • 離群值先檢查、記錄原因、不默默刪除;知道換儀器常出現高 Q
4 小時課程時間表

本週以電腦教室數據分析為主

時間內容
0:00–0:25講解:W13 回顧(w、t、b)、VIP 原理與手算一次
0:25–1:15讀 VIP:VIP vs 係數、VIP>1 篩選、選擇偏誤(NB12 示範)
1:15–1:40講解:分類原理(one-hot/argmax、PLS-DA、邏輯斯迴歸、混淆矩陣)
1:40–2:30Orange OR14 上半:六種油 PCA+邏輯斯迴歸,讀混淆矩陣
2:30–2:55講解:Hotelling T² 與 Q 殘差、影響圖
2:55–3:30Orange OR14 下半:Apply Domain 找模型外樣品+Corn 離群值模組
3:30–4:00各組分享:VIP 高的波段是否符合化學?哪兩種油最容易搞混?
先回顧 W13 PLS ↗

PLS 模型裡的三個字母:w、t、b

光譜 x x₁, x₂, x₃, … J 個波長的吸光度 分數 t t = Σ wⱼ·xⱼ 每個 LV 一個數字 預測 ŷ ŷ = q₁t₁ + q₂t₂ + … q=y 對 t 的斜率 × w × q 捷徑:ŷ = b₀ + Σ bⱼ·xⱼ b(迴歸係數)=把 w 與 q 串起來:每個波長一個 b,正負號=方向
  • LV(潛在變數):PLS 從光譜裡整理出的「綜合指標」,每個 LV 都同時跟光譜與濃度有關
  • w(權重 weights):每個 LV 一組,每個波長一個數字=「這個波長在這個 LV 裡占多少份量」
  • t(分數 scores):光譜(先扣掉平均光譜)乘上 w 再加總。例:w=(0.6, 0.8)、x=(0.5, 0.25) → t=0.3+0.2=0.5
  • b(迴歸係數):把 w 和 q 串起來後,每個波長一個 b;正負號告訴你方向
原理 1

VIP:變數重要性投影,每個符號講白話

VIPj = √( J · Σa SSYa·(wja/‖wa‖)² / Σa SSYa )
  • j=第 j 個波長;J=波長總數(NB12 程式裡寫成 p;本例 J=81);a=第 a 個 LV
  • SSYa = qa²·Σta²=第 a 個 LV 解釋掉的 y 變異(小寫 q 是 y 對 t 的斜率,跟後面的 Q 殘差無關)
  • (wja/‖wa‖)²=波長 j 在第 a 個 LV 權重裡的占比;每個 LV 的占比加起來=1
  • 白話:VIP² = J ×「各 LV 占比,用 SSY 加權平均」——在解釋最多 y 的 LV裡份量大,VIP 就高
  • 占比加總=1 → 全部波長的 VIP² 平均剛好=1 → VIP>1=高於平均(經驗法則,不是檢定)
  • NB12 的 4 個 LV 解釋的 y 變異占比:84.5%/13.6%/1.6%/0.3%——第 1 個 LV 幾乎說了算
VIP 算一次

3 個波長、2 個 LV,手算看看

假設 SSY=[8, 2](LV1 解釋 8、LV2 解釋 2,共 10);J=3

波長LV1 占比LV2 占比Σ SSY×占比VIP²=J×…÷ΣSSYVIP
波長 10.640.008×0.64+2×0.00=5.123×5.12÷10=1.5361.24
波長 20.360.208×0.36+2×0.20=3.283×3.28÷10=0.9840.99
波長 30.000.808×0.00+2×0.80=1.603×1.60÷10=0.4800.69
檢查:mean(VIP²)=(1.536+0.984+0.480)÷3=1.00 ✓ 就算只有 3 個波長也成立。
波長 1 只在大 LV(SSY=8)上有份量 → VIP 最高;波長 3 份量大,但在小 LV(SSY=2)上 → VIP<1。
VIP ≠ 方向

VIP 沒有正負號,係數 b 才有

NB12VIP係數 b
1200 nm(醋酸 C–H,示意)2.57+4.96
1450 nm(水 O–H 第一倍頻,示意)1.82-4.01
  • 兩個波段 VIP 都 >1:都重要
  • b 一正一負:其他輸入固定時,1200 nm 的輸入增加會提高預測濃度,1450 nm(水)則相反;實際光譜隨濃度怎麼變,要另外看資料,不能直接由 b 反推
  • 要講「方向」一定看 b;VIP 只回答「重不重要」

NB12 示範資料(模擬光譜,非本班實測)建立的 4-LV PLS 模型;藍線=VIP(永遠 ≥0),橘線=係數 b。

數據・VIP

VIP vs 波長,用 VIP > 1 篩選重建模型

NB12 模型波長數LVRMSECVRMSEP
全波段8140.17560.1658
VIP>11830.2256 ↑0.1329 ↓
  • 留下的波長:1150–1250 nm(11 個)、1420–1480 nm(7 個)——正好是醋酸與水的吸收帶 ✓
  • RMSECV 變差、RMSEP 變好:兩個指標說法相反
  • 測試集只有 20 個樣品,RMSEP 差 0.03 可能只是運氣——兩個都不能單獨相信

NB12 示範資料(模擬):訓練集 60、測試集 20;紅線=VIP=1。單位:醋酸 %。

選擇偏誤 selection bias

用同一批資料選波長又打分數=自己出題自己改

❌
同一批資料又選又評
用全部資料算 VIP、挑波長,再用同一批資料評分——模型等於先偷看了答案,成績會偏樂觀
✅
只在校正集上選
VIP 只用校正(訓練)集算;篩完才用從沒碰過的測試集算一次 RMSEP
🔁
或在每一折裡重選
做交叉驗證時,每一折都重新算 VIP、重新篩,RMSECV 才公平
NB12 做了什麼:VIP 用 60 個訓練樣品算,RMSECV(篩選後) 也在同一批訓練樣品上算 → 屬於「又選又評」,要小心偏樂觀;RMSEP 用從沒碰過的 20 個測試樣品 → 公平,但樣品太少。VIP>1 的門檻是事先定好的,不是看 RMSEP 調出來的。
小遊戲 ①VIP 與迴歸係數 即時測驗0 / 5
分類 ①

one-hot 編碼與 argmax:把類別變成數字

CANCOCEVOOPEAROOSOY結果
EVOO 的 one-hot(答案)001000第 3 欄=1
NB12 測試樣品 ŷ(實際 COC)-0.130.91-0.170.220.37-0.21argmax → COC ✓
被判錯的樣品 ŷ(實際 CAN)0.25-0.070.250.10-0.130.60argmax → SOY ✗

代碼:CAN=芥花油、COC=椰子油、EVOO=特級初榨橄欖油、PEA=花生油、ROO=精製橄欖油、SOY=大豆油。

分類 ②

PLS-DA:把分類問題做成迴歸

  • y 從「一個濃度」變成「6 欄 one-hot」;PLS 同時對 6 欄做迴歸(跟 W13 同一套 PLS)
  • LV 數一樣用交叉驗證選:NB12 選出 6 個 LV
  • 每個新樣品得到 6 個 ŷ → argmax 決定類別
  • 最後把測試集結果整理成混淆矩陣(下兩頁)
NB12 的六油資料:6 種油 × 15 個樣品=90 個;依類別分層抽 30% 當測試集(27 個),其餘 63 個建模。

Orange 沒有 PLS-DA 元件;入門路線改用「PCA 分數+邏輯斯迴歸」做同一件事(下一頁)。
分類 ③ Orange 路線

PCA 分數+邏輯斯迴歸:分數 → 機率

10z=分數的加權總和機率 pz=-2 → 0.12-2z=0 → 0.500z=2 → 0.882
  • 先壓縮:PCA 把 70 個波長濃縮成 6 個分數(W12 PCA ↗),分類器只看這 6 個數字
  • 邏輯斯迴歸(logistic regression):把分數加權相加得 z,圖中的 S 曲線 p=1/(1+e−z) 是二分類的示範(只有兩類時才用單一 sigmoid)
  • 6 種油是多項邏輯斯迴歸:每一類各算一個 zk,用 softmax 一起正規化成機率 pk=exp(zk)/Σexp(zj),六個機率總和為 1,取最大的那一類——跟 argmax 同一個道理
  • C=100:正則化(限制權重不要太大)的強度,C 越大限制越弱,模型越能貼合訓練資料
Orange OR14 上半

六種油分類:File → PCA → 邏輯斯迴歸 → 混淆矩陣

Fileor14_oils_class.csvPCA6 個成分・Normalize 不勾Logistic RegressionC = 100Test and Score5 折交叉驗證Confusion Matrix混淆矩陣Transformed DataLearner
混淆矩陣怎麼讀

NB12 PLS-DA:測試集 24 / 27 = 88.9%

實際\預測CANCOCEVOOPEAROOSOY
CAN400001
COC040000
EVOO004000
PEA000500
ROO001021
SOY000005
  • 列=實際類別,欄=模型預測;綠色對角線=判對
  • 準確率=對角線總和 ÷ 全部=24 ÷ 27=88.9%(6 個 LV)
  • 紅色=判錯:CAN→SOY(1)、ROO→EVOO(1)、ROO→SOY(1)
  • ROO(精製橄欖油)錯最多:被當成 EVOO 是因為兩者共用橄欖家族基線;被當成 SOY 則是跨家族的誤判,可能只是測試樣品太少造成的偶然

NB12 示範資料(模擬光譜,非本班實測)。

一次看一類

敏感度與特異度:以 ROO 為例

預測是 ROO預測不是 ROO
實際是 ROOTP=2
抓到
FN=2
漏抓
實際不是 ROOFP=0
誤抓
TN=23
正確排除

把 6×6 矩陣壓成「是 ROO/不是 ROO」的 2×2。

  • 敏感度=TP÷(TP+FN)=2÷4=0.50:真的 ROO 只抓到一半
  • 特異度=TN÷(TN+FP)=23÷23=1.00:從沒把別的油誤判成 ROO
  • 對照 SOY:敏感度 1.00,但有 2 個別的油被誤判成 SOY → 特異度=0.909
  • 敏感度低=漏抓;特異度低=誤抓——兩個要一起看
小遊戲 ②這是分類問題還是定量問題?0 / 6
把 6 個食品分析情境分到「分類問題(PLS-DA)」或「定量問題(PLS 迴歸)」。
離群值 ①

Hotelling T²:在模型裡離中心多遠

PC1 分數 t₁(λ₁=4,較寬)PC2 分數 t₂(λ₂=1,較窄)A t=(2,1):T²=2²/4+1²/1=2B t=(0,2):T²=0+2²/1=495% 界限 T²=6.66
  • T² = Σ ta² / λa:ta=樣品在第 a 個 PCA 主成分上的分數;λa=校正集在這個主成分上的變異(特徵值,W12 PCA ↗)
  • 白話:用每個主成分自己的寬度當尺——在窄的方向走一步,比在寬的方向走一步更「不正常」(B 比 A 遠)
  • 95% 界限:用 F 分布算出一個橢圓,正常樣品約 95% 會落在裡面;NB12(校正集 40 個、2 個主成分)用 k(n−1)/(n−k)·F 的近似界限=6.66
  • 嚴格說,這個界限是給校正集自己用的;套用在新樣品上要再乘 (n+1)/n,約 6.83——差異不大,離群判定的結論不會變
離群值 ②

Q 殘差(SPE):離模型平面多遠

PCA 模型平面(校正集的主成分撐出來的「正常範圍」) 校正集中心 投影點 x̂ T²:在平面內離中心多遠 新樣品 x Q:離平面多遠 =Σ(x − x̂)²
  • Q = Σ(x − x̂)²:x̂=模型用主成分「重建」出來的光譜;差值就是模型解釋不到的部分
  • 例:三個波長的殘差 [0.01, −0.02, 0.02] → 三個殘差的平方和 Q=0.0001+0.0004+0.0004=0.0009;這裡只練習計算,是否超標必須用同一個模型、相同波長與前處理建立的界限來比,不能套用別的模型算出來的界限
  • 95% 界限(Jackson–Mudholkar 近似):用校正集被捨棄的主成分還剩多少變異,推算 95% 正常樣品的 Q 不會超過多少;NB12=0.00118
  • 注意:Q 是大寫、是殘差;VIP 公式裡的小寫 q 是斜率,兩者無關
離群值 ③

T² 與 Q 一起看:四種情況

✅
T² 低、Q 低:正常
在校正範圍內,模型也認得這種光譜
📐
T² 高、Q 低:極端但認得
化學組成模型看得懂,只是比校正集都極端。NB12 槓桿點:T²=28.4(界限 6.66)、Q=0.00091(界限 0.00118)
🌀
T² 低、Q 高:模型沒見過
出現模型解釋不到的新變異(新雜質、換儀器)。NB12 換儀器樣品:T²=0.63、3.17,Q 約為界限的 33 倍
🚨
T² 高、Q 高:最優先檢查
又極端、又有新變異——先回頭看光譜與樣品,再決定能不能用
小遊戲 ③T² 高 vs Q 高0 / 6
依剛學的定義判斷:這個情境比較像「T²高(槓桿)」還是「Q高(模型解釋不到的新變異)」?
數據・T² vs Q 影響圖

NB12 示範:同儀器校正,套到極端樣品與別台儀器

  • 橘色槓桿點:T²=28.4 遠超界限 6.66,但 Q=0.00091 在界限內 → 極端但模型認得
  • 紅色換儀器點:T² 正常,Q 約為界限的 33 倍 → 模型沒見過的儀器差異
  • 縱軸是對數刻度:每往上一格=大 10 倍
  • 只看 T² 會漏掉紅點;只看 Q 會漏掉橘點——兩個都要看

NB12 示範資料(模擬 PCA,40 個校正樣品、2 個主成分;不是 Corn 真實數值)。虛線=95% 界限。

Orange OR14 下半

Apply Domain:把新樣品投影到校正集的 PCA

Fileor14_outlier.csvSelect Rowsrole = calibrationPCA3 個成分(只用校正集)Apply Domain把全部樣品投影上去Scatter PlotPC1 vs PC2・依 role 上色Transformed Data → Template DataData(全部樣品)
發現離群值,怎麼辦?

先檢查,絕不默默刪除

🔍
先回頭看光譜/樣品本身
是不是氣泡、雜質、樣品放反、稀釋錯誤?先排除操作面的問題,再談統計面的判定
🚫
不能默默刪除數據
刪除前必須記錄原因;找不到原因就刪掉,等於在製造假的準確度(跟 W08 Grubbs 離群值 ↗ 同一個原則)
🔁
模型遷移要重新驗證
同一台儀器建的模型,套到另一台儀器常出現高 Q——換儀器/換批次時要重新檢查,必要時做校正轉移(calibration transfer)

📖 離群值偵測教學模組(Corn 資料集,T²/Q 影響圖)→ ——用 Corn 資料集(80 樣品×700 波長,m5/mp5/mp6 三台儀器)實際操作 T²/Q 影響圖。

小遊戲 ④模型結果看起來怪怪的,該怎麼排查?— / 6
用 ▲▼ 把「懷疑一個模型結果」時該做的檢查排成合理順序。
小遊戲 ⑤決策挑戰:VIP/分類/離群值綜合判斷0 / 5
小遊戲 ⑥計算闖關:這 5 個 VIP 值的 mean(VIP²)未作答
NB12 印出的 VIP 表中,抽出 5 個波長(900、1100、1300、1500、1700 nm)的 VIP 值:0.753, 0.564, 0.342, 0.707, 0.292。求這 5 個值的 mean(VIP²)(提示:這只是全部 81 個波長中的一部分,不是全部)。
課後作業

入門 Orange OR14 + 進階 Colab NB12

🎯
入門:混淆矩陣
OR14 上半:附上六種油的混淆矩陣截圖,寫出準確率、最常搞混的兩種油,並算其中一類的敏感度/特異度
🔎
入門:誰在模型外?
OR14 下半:附上 Apply Domain 散佈圖,指出落在校正點群外的樣品,並說明為什麼換儀器樣品在圖上不一定看得出來
📈
進階:VIP 圖+化學解讀
NB12:畫 VIP 與係數 b,標出 VIP>1 的波段並對應化學;比較篩選前後 RMSECV/RMSEP,討論選擇偏誤
🚨
進階:T²/Q 案例
NB12:從影響圖挑一個超標樣品,說明它是 T² 高、Q 高還是兩者都高,以及你會怎麼處理

在 Colab 開啟 NB12 ↗ ・入門(不用寫程式):Orange 流程 OR14 ↗。報告也請附上各組分享時的結論:VIP 高的區域是否符合化學、哪兩種油最容易搞混。

自我檢核

今天結束,你應該會…

點一下打勾——確認自己真的會了。

EN