Raman-Pesticide-Classification
本專案實作了拉曼光譜多類別分類流程,結合 XGBoost 與 Optuna 超參數最佳化,針對多種農藥樣本進行偵測。支援 .csv 格式光譜資料,內建交叉驗證、混淆矩陣與多種視覺化工具。
專案流程簡介
- 
資料前處理
 
- 
數值插值:將波長補齊為整數波長點
 
- Min-Max 歸一化:各樣本強度縮放至 0‒1
 
- 
特徵工程(可選)
 
- 
PCA 降維或平滑濾波(Savitzky–Golay)
 
- 
模型訓練
 
- 
利用 xgboost.XGBClassifier 搭配 Optuna 搜尋最佳超參數
 
- 
模型評估
 
- 
Accuracy、F1-score、ROC-AUC
 
- 混淆矩陣、特徵重要度圖
 
- 
模型導出
 
- 
儲存為 joblib 檔供下游推論使用
 
系統需求
| 軟硬體        | 版本/建議                                          |
| ---------- | ---------------------------------------------- |
| Python | 3.9 以上                                         |
| RAM    | ≥ 8 GB                                         |
| GPU    | 非必要;若啟用 tree_method="gpu_hist" 需 NVIDIA CUDA |
安裝方式
建議先建立虛擬環境(conda 或 venv 均可)。
bash
git clone https://github.com/walterfan1322/Raman-Pesticide-Classification-XGBoost-Optuna.git
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements.txt
檔案結構
| 路徑 / 檔案            | 說明                 |
| ------------------ | ------------------ |
| experiment.ipynb | 主程式:資料載入→前處理→訓練→評估 |
| data/            | 放置原始光譜 .csv 檔案   |
| output/          | 儲存模型、報告與圖表         |
| requirements.txt | 套件依賴清單             |
| README.md        | 本說明文件              |
資料格式與命名規則
- 檔案格式:
_.csv
  範例:Chlorpyrifos_001.csv 
- CSV 內容
 
100,101,102,...,1800      ← 第 1 列:波長 (nm)
  0.123,0.117,0.115,...     ← 第 2 列:強度
舉例:兩份資料 Chlorpyrifos_001.csv、Diazinon_017.csv 會自動產生 label = ["Chlorpyrifos", "Diazinon"] 進行監督式學習。
快速開始
```bash
啟動 Jupyter Notebook
jupyter notebook experiment.ipynb
```
若欲批次執行,可轉為 Python 腳本:
bash
jupyter nbconvert --to script experiment.ipynb
python experiment.py
輸出說明
| 檔案                                 | 內容                      |
| ---------------------------------- | ----------------------- |
| output/pesticide_raman.joblib    | 訓練完成之最佳模型               |
| output/classification_report.txt | 各類別 Precision、Recall、F1 |
| output/confusion_matrix.png      | 測試集混淆矩陣圖                |
| output/feature_importance.png    | XGBoost 特徵重要度 Bar plot  |
評估指標
- Accuracy:整體正確率
 
- F1-score:含 Precision 與 Recall 之調和平均
 
- ROC-AUC:多類別情境下以 One-vs-Rest 計算
 
- Confusion Matrix:檢視各類別易混淆情形
 
常見問題(FAQ)
| 問題             | 解決方式                                            |
| -------------- | ----------------------------------------------- |
| Notebook 找不到資料 | 確認 data/ 內檔名無中文或空白字元                          |
| Optuna 太慢      | 減少 n_trials 或收窄參數範圍                           |
| 無法使用 GPU       | 將 tree_method 設為 "hist" 或安裝 xgboost GPU 版 |
參考文獻
- Chen & Guestrin, “XGBoost: A Scalable Tree Boosting System,” KDD, 2016.
 
- Akiba et al., “Optuna: A Next-generation Hyperparameter Optimization Framework,” KDD, 2019.
 
- R. Smith, “Modern Raman Spectroscopy — A Practical Approach,” Wiley, 2019.