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

光譜前處理 與相似度比對(定性鑑別)

Preprocessing & Spectral Similarity — Qualitative Identification
食品分析實驗 · 4 小時課程
Raman/NIR 前處理 · 光譜庫建立 · 相似度指標 · NNLS 混合物預覽
ALS 基線 (λ, p)SNV/MSCSG 平滑與導數Pearson r / cosine / SAM光譜庫比對NNLS 混合物擬合
開始前,先看這包粉末
一包白色粉末寫著「代糖」——
是阿斯巴甜?三氯蔗糖?赤藻糖醇?還是混了好幾種?

用眼睛看,四種都是白色細粉,長得一模一樣。但只要量一段光譜,形狀騙不了人。

但別急著比對:同一包粉末,換一台儀器、換一個裝填方式重新量測,原始光譜可能長得完全不一樣—— 螢光背景(baseline)把訊號蓋住、粒徑不同造成散射(scatter)讓基線歪斜、 不同儀器的強度(intensity)單位也對不起來。今天要學的就是:先把這些「雜訊」處理掉, 再用相似度指標科學地說出「這包粉末最像光譜庫裡的哪一個」。

今天的任務: 用 W10 全班量測的純化合物光譜,建立一個小型光譜庫(spectral library), 再鑑別 TA 準備的盲樣與市售代糖——最後互相比對誰的比對分數最有說服力。

W11 / COURSE TOUR

先清理量測差異,再辨認光譜

完整旁白與字幕;模擬數據,非實測指紋。 獨立播放器與下載 · 互動實驗

W11 / PREDICT · OBSERVE · EXPLAIN

六幕互動實驗:用證據選前處理

今天的學習目標

上完 W11,你應該會…

  • 說出為什麼原始光譜不能直接比較:螢光基線、粒徑散射、強度差異三個問題
  • 對 Raman 光譜做宇宙射線尖峰移除與 ALS 基線移除,並知道 λ(平滑度)與 p(不對稱性)怎麼影響結果
  • 對 NIR 光譜做 SNV / MSC 去除散射,並用 SG 平滑與 1st/2nd 導數強化細節
  • 用 Pearson r、cosine、SAM、Euclidean 四種相似度指標比對光譜,並知道各自對「強度」敏不敏感
  • 建立班級光譜庫並鑑別 TA 盲樣與市售代糖,回報 top-3 而非只看第一名
  • 用 NNLS 對未知混合物做初步定量預覽(Σcᵢ·參考ᵢ),銜接 W16
  • 在 Orange OR11 讀懂距離矩陣與樹狀圖,找出未知樣品最相似的光譜庫樣品

前處理工具:本堂課用 SpectraView (GitHub) ↗(操作文件 ↗)操作 SG 平滑、基線、SNV/MSC、導數、尋峰與 .speclib 光譜庫比對;入門也可以用 Orange 流程 OR11 ↗:File → Preprocess Spectra(ALS 扣基線 → 向量正規化)→ Distances(Pearson) → Distance Matrix + Hierarchical Clustering,只做「找出最像哪一個」的定性鑑別——混合物的 NNLS 定量仍要用 Colab NB09。

光譜其實是什麼?

光譜=一串數字

每一個波長/波數只是「一欄」,強度值只是「一格數字」——本堂課的示意光譜共 71 個資料點(每 20 cm⁻¹ 一點),一條光譜=71 個數字排成一列。前處理(尖峰移除、基線、SNV…)其實就是「對每一列做同一套運算」。

Raman shift (cm⁻¹)400420440460480
強度 (a.u.)0.4310.4480.4571.3550.466

Excel 裡:一列(row)=一條光譜,71 欄=71 個波數;在 Excel 對一整列套用同一個公式(例如 SNV),就是「前處理」;71 個樣品 × 71 欄,就是 W12 起要用到的資料表 X。

原理

原始光譜為什麼不能直接比較?

為什麼原始光譜不能直接比較? ① 螢光基線 (fluorescence baseline) 量到的光譜 螢光背景 真正訊號 拱形背景把真正的訊號峰墊高、變得不明顯 ② 粒徑散射 ③ 強度差異 同一波數,強度卻不同 同一成分,因粒徑/裝填不同,截距與斜率都不一樣 同一支光譜儀量兩批「一樣的」樣品,數字卻對不起來——這就是為什麼要先前處理,再比對。
前處理①

宇宙射線尖峰移除(despiking)

先用「中值濾波(median filter)」估計每個點附近應該長怎樣,再看每個點偏離這個估計多遠——偏離用「穩健的標準差」MAD(median absolute deviation)來算,換成「修改式 Z-score」;偏離超過 6 個 robust SD 就判定是尖峰,用中值濾波的值取代它。

位置1234567
原始值0.300.310.292.100.320.300.29
7 點中值濾波0.300.300.300.300.300.290.29
修改式 Z-score0.00.7-0.7121.41.30.70.0
修正後0.300.310.290.300.320.300.29

第 4 點 2.10,z ≈ 121(遠超過 6)→ 判定為宇宙射線尖峰 → 用中值濾波估計值 0.30 取代。窗口(window)太寛,可能連真實的窄波峰都被判定成尖峰而誤刪;太窄則可能漏抓尖峰——NB09/OR11 都用 7 點窗口、z>6。

前處理②

ALS 基線:λ 與 p 兩個參數

NB09/Orange OR11 的預設都是 λ=10⁶、p=0.01——本課的共同標準。Orange 操作路徑:Preprocess Spectra → ALS。

ALS 基線:λ 太小會把真實波峰也當成基線扣掉 量到的光譜(背景+真實波峰) λ 夠大(如 10⁶)=硬尺:只貼著寬背景,不理會尖峰 λ 太小=軟繩:連真實波峰也陷進去、被當成基線扣掉 p=0.01:只有 1% 的權重相信「目前落在基線之上」的點——逼著基線盡量往下貼
數據・Raman

Raman 前處理:尖峰移除 + ALS 基線移除

示意光譜(非本班實測),但前處理後曲線是對左邊的原始曲線真的執行 despike()+ALS(λ=1e6、p=0.01) 算出來的結果,跟 NB09 clean_spectrum() 同一套公式。前處理前含 2 個宇宙射線尖峰與寬廣螢光基線;λ 太小會把真實波峰也當成基線吃掉,p 控制「只信任基線以下的點」的程度。x 軸為等間距 Raman shift。
前處理③

SNV 一步步算

公式:y′=(y−ȳ)/s,ȳ=這條光譜自己的平均值,s=這條光譜自己的標準差(population SD,除以 n 不是 n−1)。

點1點2點3點4點5
y0.20.40.90.50.3
y′ (SNV後)-1.08-0.251.820.17-0.66

ȳ=0.46,s=0.242(population SD)。把每個 y 換成「離平均幾個標準差」,就是 y′。刻意把 y 換成 2y+0.1(強度放大兩倍再平移)算一次 SNV,結果完全一樣——這就是 SNV 對平移與縮放都不敏感的原因。
Excel:=(B2-AVERAGE($B2:$F2))/STDEV.P($B2:$F2)(注意用 STDEV.P 不是 STDEV.S)。MSC 概念相同,差別在拿一條參考光譜(通常是平均光譜)做迴歸 y=a+b·y_ref,再用 (y−a)/b 校正。

數據・NIR

NIR 前處理:SNV 去除粒徑散射

前處理前:3 條同成分光譜,因粒徑/裝填不同而截距、斜率互異(示意數據)。
SNV 後:以「每條光譜自己的平均值與標準差」重新標準化,3 條幾乎完全重合。

強度差異也可用向量正規化(除以向量長度)或面積正規化(除以光譜下面積)處理——下一節會用到。

前處理④

Savitzky–Golay 平滑與導數

Savitzky–Golay:視窗內擬合一條二次曲線,只取「中心點」的擬合值 目前視窗(實際為 15 點) 輸出=這個中心點 視窗往右移一格、重擬合一次二次曲線,重複到整條光譜——視窗越寬越平滑但波峰變胖;階數太低會抹平波峰形狀
導數直覺

導數=斜率(用差分想)

1st 導數=相鄰兩點的差值;2nd 導數=差值的差值。

光譜 y1st 導數(差分)2nd 導數(再差分)
[1, 2, 4, 7][1, 2, 3][1, 1]

把整條光譜都加上一個常數(等於基線整體平移,如 [6, 7, 9, 12]),1st 導數完全不變——因為差分會把常數消掉;線性的斜率(整條光譜同一個方向慢慢升高)在 2nd 導數也會被消掉。代價是:雜訊(逐點隨機跳動)本身變化快,差分會把它一起放大,所以導數常常要搭配平滑(如 SG)一起用。

數據・NIR

NIR 前處理:1st/2nd 導數——波峰變負向極小值

示意數據。二階導數在兩個重疊波峰位置(1450、1500 nm)轉為負向極小值,能把重疊的寬峰拆解得更清楚;代價是逐點跳動(雜訊)明顯放大,視窗寬度與多項式階數要平衡「解析度」與「抗雜訊」。
前處理⑤

向量/面積正規化——先動了強度尺度

小遊戲 ①8 種前處理方法,各自解決哪個問題?0 / 8
把 8 種前處理方法分到它主要解決的問題:散射(scatter) / 基線(baseline) / 雜訊(noise) / 強度(intensity)。
相似度指標

四種比對光譜的指標公式

指標公式對「強度大小」敏感嗎
Pearson r兩條光譜「形狀」的相關程度(W04 ↗已教過)不敏感(平移、縮放都不影響)
cosine把光譜當向量,算 cosθ=(x·y)/(‖x‖‖y‖)縮放不敏感,但平移敏感
SAM (光譜角)SAM = arccos(cosine) × 180/π(換算成「度」)同 cosine——角度越小越像
Euclidean‖x−y‖,直接算數值差異非常敏感——比對前一定要先正規化
假陽性警訊:混合物的比對結果常常只匹配到主要成分,看起來像單一化合物;而在原始 NIR上,兩個完全不同的化合物也可能因為共享寬廣的 O–H/C–H 合頻帶而算出 r > 0.9——這時應改用導數光譜或轉看 Raman 指紋區,並一律回報 top-3 分數而不是只看第一名。
算一次:排名反轉

沒有正規化,Euclidean 會選錯答案

待測 U=[0.10,0.35,0.90,0.40,0.15],候選 C=[0.12,0.32,0.95,0.38,0.22](形狀跟 U 略有不同,但絕對數值很接近 U)。

指標U vs C
cosine0.9968
SAM4.59°
Pearson r0.9911
Euclidean(原始,未正規化)0.095
Euclidean(向量正規化後)0.080

跟「真正正確」的候選比:原始 Euclidean d(U,真正正確)=0.510,比上面這個 C 的 0.095 還大——原始距離會誤判 C 比較像!但正規化後,d(U,真正正確)=0.048,比 C 的 0.080 小,才判斷正確。Pearson r、cosine、SAM 因為本來就對強度不敏感,一開始就沒有判斷錯。(真正正確的候選是誰?留給後面的計算闖關 ⑥ 讓你自己算出來。)

相似度指標

四個指標,四種敏感度

📈
Pearson 相關係數 r
只看「形狀」的相對變化,對平移(offset)與縮放(scale)都不敏感——最常拿來看波形像不像
📐
餘弦相似度 cosine
把光譜當向量算夾角的餘弦;對縮放不敏感,但對整體平移(offset)敏感
🧭
SAM 光譜角 (弧度/度)
cosine 的角度版本,角度越小代表方向越接近;SAM=0 代表兩向量方向完全相同
📏
歐氏距離 Euclidean
直接算數值差異,對強度非常敏感——比對前一定要先正規化,否則會被強度差牽著走
數據・光譜庫

光譜庫比對範例:TA 盲樣 #1(Raman,示意數據)

候選化合物 ⇅Pearson r ⇅cosine ⇅SAM (°) ⇅排名 ⇅
點欄位標題可排序。SAM 一律由 cosine 換算(arccos(cos)×180/π)得到,兩欄數字互相一致。前處理(尖峰移除+ALS+向量正規化)已同步套用在光譜庫與待測光譜上。第 1 名阿斯巴甜與第 2 名蔗糖分數有落差,可放心判定;但若前二名分數接近(如 r 相差 <0.02),務必回頭用 視覺疊圖與指紋區波峰位置再次確認,不能只看數字。
小遊戲 ②光譜鑑別工作流程排序— / 6
用 ▲▼ 把「用光譜庫鑑別未知樣品」的 6 個步驟排成正確順序。
小遊戲 ③這個鑑別任務,適合用 Raman 還是 NIR?0 / 6
把 6 個情境分到「適合 Raman」或「適合 NIR」。同分異構物=分子式相同、原子排列(結構)不同的化合物。
Orange 入門路徑

OR11:距離矩陣與樹狀圖

Orange 沒有「Similarity/Library/Mixture」這類專屬元件——OR11 的鑑別,就是這四個一般用途的元件組合出來的;NNLS 混合物定量與波峰指認,Orange 做不到,要用 Colab NB09。
數據・混合物

混合物預覽:NNLS 非負最小平方擬合

示意數據。未知光譜 ≈ 0.62×三氯蔗糖 + 0.34×麥芽糊精 + 截距(比例取自 NB09 的 mix_demo);NNLS 擬合出 c₁=0.61、c₂=0.34、截距=0.018,R²=0.995。「最小平方」=找一組係數讓「殘差平方和」最小;R²=1−Σ殘差²/Σ(y−ȳ)²,跟 W07 ↗ 教過的「模型解釋參考值變異的比例」意思相同。NNLS 限制係數不可為負,符合「成分含量不能是負的」的物理意義;這裡的參考光譜沒有做向量正規化,否則「係數=比例」的線性關係會被破壞——這是 W16 定量分析的暖身。
小遊戲 ④前處理觀念 即時測驗0 / 5
波峰指認練習

回到光譜庫比對:這些波峰指認對嗎?

波峰指認練習(皆為約略值,需以本班光譜再確認) 40060080010001200140016001800 Raman shift (cm⁻¹) C–Cl 伸縮(三氯蔗糖 sucralose) 約 600–850 cm⁻¹ 約 1003 cm⁻¹ 苯環呼吸振動 (阿斯巴甜 aspartame) 表格數字只是起點——務必回頭比對「本班自己測到」的波峰位置,才算完成指認。
阿斯巴甜苯環呼吸振動落在 約 1003 cm⁻¹ 附近;三氯蔗糖的 C–Cl 伸縮則落在 約 600–850 cm⁻¹ 這段區間。這些數字都是文獻上的「約略值」——務必用本班 W10 自己量測的光譜去對照確認波峰真正落在哪裡,再回頭用同樣的位置去指認今天的盲樣與市售代糖。
小遊戲 ⑤決策挑戰:比對結果怎麼判讀?0 / 5
4 小時課程時間表

講解 → 前處理練習 → 建庫 → 比對 → 報告

時間內容
0:00–0:50講解:三個「不能直接比較」的問題、尖峰移除、ALS 基線、SNV/MSC/SG、四種相似度指標
0:50–1:40SpectraView 前處理練習:同一條光譜試不同參數(λ、p、SG 視窗/階數),記錄選擇理由
1:40–2:35用 W10 純化合物光譜建立班級光譜庫(或用 Orange OR11),比對 TA 準備的盲樣
2:35–3:30市售代糖量測(Raman 785nm + 各組 NIR)與光譜庫比對
3:30–4:00各組報告 top-3 結果與相似度分數
🔦
雷射安全
Raman 785nm/532nm 雷射勿直視光路、勿對準他人眼睛,調整前先確認遮光罩已蓋上
😷
粉末操作
秤量代糖粉末於無對流(draft-free)處,避免吸入粉塵;操作後清潔天平與檯面
小遊戲 ⑥計算闖關:SAM 光譜角 (度)未作答
兩條 5 點示意光譜:U = [0.10, 0.35, 0.90, 0.40, 0.15],C1 = [0.20, 0.55, 1.30, 0.60, 0.25]。先算 cosine = (U·C1)/(‖U‖‖C1‖),再求 SAM = arccos(cosine),最後換算成角度(°)。
度
課後作業

Colab NB09

📚
光譜庫比對表
整理:待測樣品、top-3 候選、各項相似度分數(r/cosine/SAM)、使用的前處理方法
🖼️
疊圖figure
附上待測光譜與 top-1 候選在同一張圖上疊圖比對的截圖
🔍
一個假陽性/模糊比對討論
挑一個 top-1、top-2 分數接近或明顯誤判的案例,說明可能原因與怎麼確認
🧮
NNLS 練習
任選一個混合物樣品,跑一次 NNLS 擬合,記錄係數與 R²

Colab NB09:在 Colab 開啟 NB09 ↗ ・入門(不用寫程式):Orange 流程 OR11 ↗。報告需附:光譜庫比對表(top-3)、疊圖、一個假陽性/模糊比對的討論、前處理參數選擇理由。

自我檢核

今天結束,你應該會…

點一下打勾。

EN