ML 分類 · Python × Orange
← → / 空白鍵切頁 · F 全螢幕 · 點兩側翻頁
食品分析 · 化學計量學 × 機器學習

五種模型,
幫茶葉驗明正身

LDA · Ridge · Random Forest · Boosting · SVM
用 14 元素指紋判別「臺灣 vs 境外」茶 · 每種模型都教兩條路:Python 寫程式 × Orange 拉積木
監督式分類標準化留一法 LOO-CVscikit-learnOrange
接續 · 茶葉多重元素檢驗 TFDAF0032.00
承上 · 指紋拿到了,然後呢?
14 個元素數字攤在眼前,
電腦怎麼自己判台灣/境外?

人腦看 2 個元素還行,看 14 維就投降了。我們需要一個能自動找出分界的工具——這就是分類器 (classifier),機器學習的核心。

14 維太難用眼睛看要能自動判要能說多準要能換新樣本就用
本片把 TFDAF0032.00 列的 5 種統計/機器學習模型一字排開,同一份茶葉資料,看它們各自怎麼學會「畫出那條產地分界線」。
本片怎麼學

一份資料 × 五模型 × 兩條路

📋
同一份資料
茶葉 20 樣本 × 元素指紋,標籤=臺灣/境外。所有模型公平比
🤖
五種模型
LDA·Ridge(傳統線性)+ RF·Boosting·SVM(機器學習)
🛣️
兩條實作路
🐍 Python 寫幾行程式 🧩 Orange 拉積木不寫碼
每個模型的詳解頁都長一樣:左邊一張圖看直覺右邊 Python 程式 + Orange 積木。看完你能在兩種工具裡都把它跑起來。
先懂這件事

監督式分類:給答案學分界

  • 特徵 X:每個茶樣的 14 個元素含量(一列=一個樣本)
  • 標籤 y:這個樣本的產地(臺灣=1/境外=0)
  • 模型從「X→y」的例子中學出一條分界,之後拿新樣本就能判
  • 5 種模型差在「怎麼畫這條界」——直線、曲線、還是一堆樹投票
怎麼知道模型「真的會」而不是死背?
不能看訓練資料的分數(會過擬合、虛高)。本片用留一法 LOO-CV:每次留 1 個樣本當考題、其餘 19 個當課本,輪流考 20 次,平均才是「對新樣本」的真實實力。
20
茶樣(臺灣 12 / 境外 8)
13
微量元素特徵(T 子集)
20 折
留一法輪流當考題
共同起點

標準化,再交給任何模型

為什麼要標準化?
元素單位差很多:P/K/Ca 是 %、Sr/Pb 是 mg/kg。不處理的話,數值大的元素會「霸佔」距離與係數,小元素的訊號被蓋掉。標準化把每個元素轉成平均 0、標準差 1,大家站同一起跑線。
⚠️ 別讓答案偷看
  • 標準化要包進交叉驗證裡:只用訓練折算平均/標準差
  • Python 用 Pipeline、Orange 把 Preprocess 接進 Test&Score,都是同一個道理
所有模型共用的骨架
from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.model_selection import cross_val_predict, LeaveOneOut # 標準化 + 模型 綁成一條 pipeline,避免資訊洩漏 pipe = make_pipeline(StandardScaler(), model) pred = cross_val_predict(pipe, X, y, cv=LeaveOneOut())
五位選手

兩大家族,同場較勁

LDA
線性判別
傳統統計 · 線性
Ridge
脊迴歸分類
傳統統計 · 線性
Random Forest
隨機森林
機器學習 · 樹集成
Boosting
梯度提升
機器學習 · 樹集成
SVM
支援向量機
機器學習 · 間隔/核
左二|傳統統計(線性)
LDA、Ridge 畫的是直線分界,係數可解讀、小樣本穩。是統計學的老將。
右三|機器學習
RF/Boosting 用很多決策樹抓非線性與交互作用;SVM 找最大間隔、核函數可彎曲分界。
模型 ① · 傳統統計 · 線性

LDA:找一條投影軸拉開兩群

投影軸 LD1 臺灣 境外 組間最遠 · 組內最密
一句話:找一個投影方向,讓投影後組間距離最大、組內散布最小,兩群自然分兩邊。
Python · scikit-learn
from sklearn.discriminant_analysis import \ LinearDiscriminantAnalysis clf = LinearDiscriminantAnalysis() clf.fit(X_std, y) # X_std=標準化元素, y=產地 clf.predict(X_new) # 判新茶樣
🧩 Orange Data Mining 做法
  • Orange 無原生 LDA 分類積木
  • 改用 Logistic Regression 積木(同為線性分界,效果近似)
  • 想看 LDA「投影圖」可另裝 add-on 的投影視覺化
線性可解釋LOO-CV 95%
模型 ② · 傳統統計 · 線性

Ridge:加 L2 懲罰,抗過擬合

無懲罰(亂、過擬合) +L2 收縮(穩) L2 懲罰 係數大、隨雜訊亂跳 係數變小、更穩健
一句話:線性模型 + L2 懲罰把係數「收縮」變小,不讓少數雜訊元素把分界帶歪 → 更穩、更能用在新樣本。
Python · scikit-learn
from sklearn.linear_model import RidgeClassifier clf = RidgeClassifier(alpha=1.0) # alpha 越大懲罰越強 clf.fit(X_std, y) clf.predict(X_new)
🧩 Orange Data Mining 做法
  • Orange 無原生 Ridge 分類積木
  • Logistic Regression 積木 → Regularization 選 Ridge (L2)
  • 調 C:C 越小=懲罰越強(與 alpha 相反方向)
線性正則化LOO-CV 100%
模型 ③ · 機器學習 · 樹集成

Random Forest:一片樹林投票

樹1→臺灣 樹2→臺灣 樹3→境外 …300 棵 多數決投票 → 臺灣 很多棵「看法略不同」的樹,一起投票
一句話:種很多棵「各看資料不同子集、不同元素」的決策樹,最後多數決投票。能抓非線性、還會告訴你哪個元素最重要
Python · scikit-learn
from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier(n_estimators=300, random_state=0) clf.fit(X_std, y) clf.feature_importances_ # 哪些元素最關鍵
🧩 Orange Data Mining 做法
  • Orange 有原生 Random Forest 積木 ✓
  • Number of trees(樹的數量)即可
  • Test & Score 比正確率、接 Confusion Matrix 看錯在哪
非線性特徵重要度LOO-CV 95%
模型 ④ · 機器學習 · 樹集成

Boosting:一棵接著一棵補錯

樹1 樹2 補錯 樹3 再補錯 殘差 殘差 Σ 逐步加總 一棵接一棵、愈來愈準 強,但小資料容易過擬合
一句話:樹不是各自獨立,而是一棵接一棵,每棵專門修正前一棵的錯誤(殘差),逐步加總變強。
Python · scikit-learn
from sklearn.ensemble import \ GradientBoostingClassifier clf = GradientBoostingClassifier(random_state=0) clf.fit(X_std, y) clf.predict(X_new)
🧩 Orange Data Mining 做法
  • Orange 有原生 Gradient Boosting 積木 ✓(另有 AdaBoost
  • 可選底層:scikit-learn / XGBoost / CatBoost
  • 強,但小資料容易過擬合 → 本片 20 樣本只拿 85%(最低)
非線性序列集成LOO-CV 85%
模型 ⑤ · 機器學習 · 間隔/核

SVM:找一條間隔最大的界

分界線 ↔ 最大間隔 margin 臺灣 境外 ⊙ 支援向量決定邊界 · 核函數可處理非線性
一句話:在兩群之間找一條「左右留白最大」的分界線;邊界只由少數支援向量決定,核函數還能把分界彎成曲線。
Python · scikit-learn
from sklearn.svm import SVC clf = SVC(kernel='rbf', C=1.0, gamma='scale') clf.fit(X_std, y) # SVM 對標準化特別敏感 clf.predict(X_new)
🧩 Orange Data Mining 做法
  • Orange 有原生 SVM 積木 ✓
  • Kernel(RBF 非線性 / Linear 線性)、調 Cgamma
  • 務必先接 Preprocess→Normalize,SVM 沒標準化會很差
線性或核小樣本佳LOO-CV 100%
攤牌 · 同一份資料

誰最準?答案可能跌破眼鏡

看出來了嗎?最「高級」的 Boosting 反而最低(85%),樸素的 Ridge/SVM 卻滿分

為什麼?資料只有 20 筆——集成樹(尤其 Boosting)胃口大、餵不飽就過擬合;線性模型在小而乾淨的資料上又穩又準
真實留一法結果,由 tea_five_models_demo.py 實跑、可重現(微量元素 T13)。
互動 ①把程式類別配到對的模型0 / 5
下面是 scikit-learn 的 5 個類別名稱,把每個拖(點選→點桶)到它對應的模型。
路線 A · 不寫程式

Orange:把模型拉成一張圖

Filetea CSVPreprocessNormalize 標準化Test & Score留一法 LOO-CVConfusionMatrix 混淆矩陣Data Table看資料RandomForest 隨機森林GradientBoosting 提升SVM支援向量機LogisticReg. (Ridge L2 / 線性)4 個 Learner 一起接進 Test & Score,表格直接比正確率
🧩 五個積木串起來
  • File 讀 tea CSV → Select Columns 設元素為特徵、origin 為 target
  • Preprocess(Normalize)→ Test & Score(Cross validation 設 LOO)
  • Random Forest/Gradient Boosting/SVM/Logistic Regression 接進去
  • Confusion Matrix 看哪些茶被判錯
誠實提醒:Orange 沒有現成的 LDA/Ridge 分類積木;上圖用 Logistic Regression(可選 Ridge L2 正則化)代表「線性分界」這一家。RF/Gradient Boosting/SVM 則都是原生積木,零程式碼即可比較。
路線 B · 寫幾行程式

Python:一個迴圈比完五模型

五模型一起跑 · 完整可執行
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.linear_model import RidgeClassifier from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.svm import SVC models = { 'LDA': LinearDiscriminantAnalysis(), 'Ridge': RidgeClassifier(), 'RF': RandomForestClassifier(n_estimators=300, random_state=0), 'Boost': GradientBoostingClassifier(random_state=0), 'SVM': SVC(kernel='rbf'), } for name, model in models.items(): pipe = make_pipeline(StandardScaler(), model) pred = cross_val_predict(pipe, X, y, cv=LeaveOneOut()) print(name, accuracy_score(y, pred))
程式路的好處
5 種模型只差字典裡一行,換模型/調參數/加指標都很快,全部 5 種都有現成類別(含 LDA、Ridge)。
📁 檔案都在 dataset/
決策參考 · 可排序

該用哪一個?一張表收齊

模型 家族 scikit-learn Orange 積木 本片正確率 什麼時候用
點欄位標題可排序(試以「本片正確率」)。沒有最強模型,只有最適合資料的模型。
小樣本+要解釋 → 線性(LDA/Ridge/SVM);要抓非線性或看元素重要度 → RF/Boosting(但要夠多資料)。
互動 ②觀念速測(5 題)0 / 5
動手做 · 兩條路都跑一次

看懂跑出來

🐍 Python 路
  • 下載資料:📂 dataset 資料集頁 →(含每個檔下載+整包 ZIP)
  • scikit-learnpip install scikit-learn pandas
  • dataset/python tea_five_models_demo.py
  • 看終端機印出 5 模型的 accuracy/precision/recall
🧩 Orange 路
  • 下載 Orange Data Mining(orangedatamining.com,免費)
  • File 載入 tea CSV → Select Columns 設 target
  • Preprocess→Test & Score,接 RF/Boosting/SVM/LogReg
  • Confusion Matrix:哪些境外茶被誤判成臺灣?
兩條路跑同一份資料、得同一組結論:Python 適合要彈性與自動化,Orange 適合快速探索與課堂示範。建議都跑一次,對照著學最快。
自我檢核

今天結束,你應該會…

點一下打勾——兩條路你都能跑了嗎?

重點回顧 · TAKE-HOME

同一份資料,五種看法

分類器幫 14 元素指紋畫出產地分界Python 給你全部彈性、Orange 給你零程式碼。
記得:資料小的時候,簡單模型常常最聰明。
🔎 想一想:換成「微量+肥料」特徵,五個模型的正確率會怎麼變? 🔗 延伸:PCA 降維、交叉驗證調參、特徵重要度
搭配 · 茶葉多重元素檢驗 TFDAF0032.00 · 資料:蔡承祥等 2021(教學重建)