NIR 模型校正轉移 · Calibration Transfer

同一批玉米、三台近紅外儀器:學會為什麼校正模型不能無痛跨儀器使用,以及 SBC / DS / PDS 三種修正法。三層鷹架 · 互動圖表 · 自我檢測 · Colab 一鍵執行。

Python JupyterGoogle ColabOrange Data MiningPLS · SBC · DS · PDS

這份教材要解決的問題

你在 A 儀器辛苦建好的 NIR 定量模型,換到 B 儀器就失準。Calibration transfer(校正轉移)就是用少量樣品,把模型「搬」到新儀器而不必整套重建。我們用公開的 Eigenvector corn 資料集:80 個玉米樣品在 m5 / mp5 / mp6 三台儀器量測,1100–2498 nm、共 700 個波長,附 moisture / oil / protein / starch 參考值。

① 入門 · 建立直覺

先看見「儀器差異」長什麼樣子

同一批樣品、相同化學成分,只是換了儀器,光譜就不一樣。下圖三種顏色是三台儀器量到的原始光譜——形狀相似但有系統性偏移。

三台儀器原始光譜
圖 1|同一批玉米在 m5 / mp5 / mp6 上的原始吸收光譜:整體相似,但有儀器造成的偏移。

把 m5 減去 mp5,可以看到差異不是一條水平線,而是隨波長變化——這正是為什麼「減一個常數」修不好,需要更聰明的方法。

m5 減 mp5 差異光譜
圖 2|m5 − mp5 差異光譜(平均 ± 1 標準差):差異與波長相依,且在含水/含油吸收帶特別大。

差異有多大?大到蓋過化學訊號

把三台儀器全部光譜做 PCA。若儀器沒差異,點應該按「化學成分」散開;但實際上,它們先按儀器分成上下兩群。這就是跨儀器直接套模型會壞掉的根本原因。

PCA 依儀器上色
圖 3|PCA scores 以儀器上色:m5 明顯自成一群,儀器差異主宰了主要變異。
Master 主儀器
建立原始校正模型的儀器(這裡是 m5)。
Slave 從儀器
想沿用模型的目標儀器(這裡是 mp5)。
Transfer standard
同時在兩台儀器量測的少量共同樣品,用來學轉換關係。
② 中階 · 三種轉移法

先示範「不做轉移」會多慘

用 m5 前 50 個樣品建 PLS protein 模型,直接拿去預測 mp5 的樣品:RMSEP 高、R² 甚至為負(比直接猜平均值還差)。接著比較三種修正法。

方法概念需要 paired 光譜需要標準品的 y 值
SBC 斜率偏移校正只校正「預測值」:predicted → 線性校正
DS 直接標準化全域線性映射把 slave 光譜變得像 master
PDS 分段直接標準化每個波長用鄰近視窗局部映射,較有彈性
PDS 視窗示意
圖 4|DS vs PDS:DS 用一個全域轉換矩陣;PDS 對每個波長點只用鄰近 j±k 視窗做局部對應。

結果:轉移前後的預測落差

預測散佈圖
圖 5|mp5 測試集預測 vs 參考值。越貼近虛線越準。
RMSEP 長條圖
圖 6|四種方法 RMSEP。No transfer 最差,轉移後大幅下降。

互動:換一個成分看結論是否一致

點下方按鈕切換目標成分,觀察哪個方法勝出——你會發現「最佳方法會隨成分而變」,沒有萬用解。

方法RMSEP(越低越好)R²(越高越好)需 paired需 y

③ 進階 · 陷阱與敏感度

最容易犯的錯

錯誤做法後果正確做法
把同一樣品的不同儀器光譜當獨立樣本隨機切分資料洩漏,準確率虛高sample_id 分組切分
transfer standards 選太少或分布太窄PDS 過度配適,泛化差選涵蓋濃度範圍的代表性標準品
只用「測量時間」推論標籤/分組混淆變異來源用真正的樣品與成分中繼資料
假設差異是常數,直接減偏移修不掉波長相依差異(見圖 2)用 DS/PDS 學波長相依映射

延伸思考(點開看解答)

沒有任何 paired standard 時怎麼辦?

可考慮無標準品法:如 CTAI(affine invariance)、以預處理消除儀器差異(SNV、OSC、FIR),或 domain adaptation / 遷移學習。代價是通常較不穩定,需更謹慎驗證。

PDS 的 window size 該怎麼選?

視窗太小→無法涵蓋波長偏移;太大→退化成全域 DS 並易過擬合。實務上用交叉驗證掃描半視窗寬度 k,挑 RMSEP 最低且穩定者。

為什麼 SBC 的 R² 有時最高,卻不一定是最佳選擇?

SBC 需要標準品的參考 y 值(較貴、較難取得),且只校正輸出、不修光譜本身。當你拿不到標準品 y、或想讓轉移後光譜可再做別的分析時,DS/PDS 更實用。

✓ 自我檢測

5 題快速檢測

點選你的答案,立即看回饋。

▶ 動手做

三條學習路線

Python Jupyter
本機 Anaconda / JupyterLab,開 notebooks/…_jupyter.ipynb
Google Colab
免安裝,一鍵開啟,資料自動下載。
Orange Data Mining
不寫程式,用 widget 拖拉做 PCA 與儀器差異視覺化。

▶ Open in Colab GitHub 原始碼 下載完整教材包 ZIP

Python 核心流程

  1. 下載 corn.mat,解析 m5/mp5/mp6 光譜。
  2. Savitzky–Golay 平滑 + SNV 作為基礎前處理。
  3. 用 m5 前 50 個樣品建 PLS protein 模型。
  4. 用 10 個 paired standards 學 slave→master 轉換。
  5. 用 mp5 後 20 個樣品做獨立測試。
  6. 比較 no transfer、SBC、DS、PDS 的 RMSEP 與 R²。
python analysis_script.py

Orange Data Mining 課堂活動

  1. 安裝 Orange 與(可選)Orange Spectroscopy add-on。
  2. File → 載入 corn_nir_for_orange.csv
  3. Select Columns:wl_* 為 features,Protein 為 target,sample_idinstrument 為 meta。
  4. PCA → 用 instrument 上色,重現圖 3 的儀器分群。
  5. Select Rows 分出 m5 / mp5,比較跨儀器預測落差。
  6. 把 Python 轉移後的光譜匯回 Orange,視覺化 PDS 前後變化。

術語速查

RMSEP
預測均方根誤差,越低越準。
PLS
偏最小平方回歸,NIR 定量主力。
SNV
標準正態變量,消散射造成的乘性/加性效應。
Savitzky–Golay
多項式平滑/微分,降噪並凸顯特徵。

資料來源

Eigenvector Research, “NIR of Corn Samples for Standardization Benchmarking”:eigenvector.com/resources/data-sets

背景閱讀:Zhao et al., Molecules 2019, PLS Subspace-Based Calibration Transfer for NIR Quantitative Analysis, DOI: 10.3390/molecules24071289。