返回目錄
A
資料驅動決策:從數據探索到模型部署 - 第 4 章
第4章 機器學習概論
發布於 2026-02-27 16:01
# 第4章 機器學習概論
> 本章將帶領讀者快速掌握機器學習的基本概念、分類方式、核心演算法與實務應用。透過實際 Python 範例,說明如何從問題定義到模型選擇,再到評估指標,為後續的監督式與非監督式模型建構奠定理論與實踐基礎。
## 4.1 什麼是機器學習?
機器學習(Machine Learning, ML)是人工智慧(AI)的一個子領域,專注於讓電腦在沒有明確程式指令的情況下,透過資料學習模式,並在新資料上做出預測或決策。
| 機器學習 | 目標 | 典型應用 | 範例 |
|---|---|---|---|
| 監督式學習 | 利用已標籤資料學習映射函式 | 房價預測、垃圾郵件分類 | 線性回歸、決策樹 |
| 非監督式學習 | 探索資料內在結構 | 客戶細分、圖像分割 | K‑means、PCA |
| 強化學習 | 通過試錯學習最優策略 | 自動駕駛、遊戲 AI | Q‑learning、Deep Q‑Network |
> **核心概念**:
> * **資料**(Data): 學習的原料,通常為特徵向量與標籤。
> * **模型**(Model): 用於表示資料與目標之間映射的數學結構。
> * **訓練**(Training): 將模型參數調整到最適值的過程。
> * **評估**(Evaluation): 檢驗模型泛化能力的過程,常用指標如準確率、R²、F1 分數等。
## 4.2 監督式學習(Supervised Learning)
### 4.2.1 分類(Classification)
> **定義**:輸出為離散類別。
| 演算法 | 特點 | 典型指標 |
|---|---|---|
| 邏輯迴歸(Logistic Regression) | 線性模型,易於解釋 | 準確率、AUC |
| 支援向量機(SVM) | 高維空間適用,對噪聲魯棒 | 準確率、F1 |
| 決策樹(Decision Tree) | 可解釋,易於視覺化 | 準確率、Gini |
| 隨機森林(Random Forest) | 集成多棵樹,降低過擬合 | 準確率、AUC |
| XGBoost / LightGBM | 梯度提升,速度快 | 準確率、AUC |
#### 範例:Iris 花卉分類
```python
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.metrics import classification_report
# 1. 載入資料
iris = load_iris()
X, y = iris.data, iris.target
# 2. 分割資料集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 3. 建立 Pipeline
pipe = Pipeline([
('scaler', StandardScaler()),
('svc', SVC(kernel='rbf', C=10, gamma='scale'))
])
# 4. 訓練
pipe.fit(X_train, y_train)
# 5. 評估
pred = pipe.predict(X_test)
print(classification_report(y_test, pred, target_names=iris.target_names))
```
> **小結**:分類問題往往需要先衡量資料平衡與特徵分布,選擇合適的模型與參數化策略。對於非線性資料,SVM、隨機森林與梯度提升模型表現尤佳。
### 4.2.2 回歸(Regression)
> **定義**:輸出為連續數值。
| 演算法 | 特點 | 典型指標 |
|---|---|---|
| 線性回歸(Linear Regression) | 基礎模型,易於解釋 | R²、MAE |
| 岭回歸 / Lasso | 正則化處理,防止過擬合 | R²、MAE |
| 隨機森林回歸 | 非線性,集成學習 | R²、MAE |
| XGBoost 回歸 | 梯度提升,強大的預測力 | R²、RMSE |
#### 範例:波士頓房價回歸
```python
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_absolute_error
# 1. 載入資料
boston = load_boston()
X, y = boston.data, boston.target
# 2. 分割資料集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 3. 建立 Pipeline
pipe = Pipeline([
('scaler', StandardScaler()),
('rf', RandomForestRegressor(n_estimators=200, random_state=42))
])
# 4. 訓練
pipe.fit(X_train, y_train)
# 5. 評估
pred = pipe.predict(X_test)
print('R²:', r2_score(y_test, pred))
print('MAE:', mean_absolute_error(y_test, pred))
```
> **小結**:回歸任務中,特徵標準化往往能顯著提升模型穩定性;對於高維資料,正則化或集成模型是首選。
## 4.3 非監督式學習(Unsupervised Learning)
### 4.3.1 聚類(Clustering)
> **定義**:將資料分群,類別由資料本身決定。
| 演算法 | 特點 | 典型應用 |
|---|---|---|
| K‑means | 速度快,適用於大資料 | 客戶細分、圖像分割 |
| 層次聚類(Hierarchical) | 可視化樹狀結構 | 市場細分、基因分群 |
| DBSCAN | 能捕捉任意形狀群集 | 異常偵測、密度分析 |
#### 範例:顧客行為聚類
```python
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 假設有顧客購買數據
# 1. 載入 & 前處理
# df = pd.read_csv('customer_data.csv')
# df_clean = df.dropna()
# X = df_clean[['age', 'annual_income', 'spending_score']]
# 2. 標準化
# scaler = StandardScaler()
# X_scaled = scaler.fit_transform(X)
# 3. K‑means
# kmeans = KMeans(n_clusters=4, random_state=42)
# clusters = kmeans.fit_predict(X_scaled)
# df_clean['cluster'] = clusters
# 4. 可視化
# plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=clusters, cmap='viridis')
# plt.xlabel('Age')
# plt.ylabel('Annual Income')
# plt.title('Customer Segmentation')
# plt.show()
```
> **小結**:聚類可為後續的定制化行銷與風險管理提供客戶類型基礎。
### 4.3.2 降維(Dimensionality Reduction)
| 演算法 | 特點 | 典型指標 |
|---|---|---|
| 主成分分析(PCA) | 線性降維,保留方差 | Explained Variance |
| t‑SNE | 非線性降維,保留局部結構 | 可視化效果 |
| UMAP | 非線性降維,速度快 | 可視化、聚類前處理 |
#### 範例:PCA 可視化 MNIST
```python
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# 1. 載入資料
X, y = load_digits(return_X_y=True)
# 2. PCA 2 维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 3. 可視化
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('PCA of Digits Dataset')
plt.colorbar()
plt.show()
```
> **小結**:降維可減少計算成本、降低維度災難,同時為視覺化與聚類提供更乾淨的特徵空間。
## 4.4 典型應用場景與選擇指引
| 目標 | 推薦演算法 | 為何選擇 |
|---|---|---|
| **預測銷售額** | 隨機森林 / XGBoost | 強大的非線性擬合與特徵重要性分析 |
| **客戶流失預測** | Logistic Regression / LightGBM | 可解釋性與高效訓練 |
| **圖片分類** | CNN(Deep Learning) | 專為圖像處理設計 |
| **異常偵測** | Isolation Forest / Autoencoder | 對離群值敏感 |
| **市場細分** | K‑means / DBSCAN | 需要自動分群 |
> **選擇流程**:
> 1. 明確問題類型(分類、回歸、聚類、降維)
> 2. 評估資料規模與特徵性質(線性/非線性、噪聲、維度)
> 3. 試驗簡單模型,衡量基準表現
> 4. 根據需求(可解釋性、速度、精度)調整演算法與參數
## 4.5 進階話題預告
- **深度學習(Deep Learning)**:卷積神經網路、遞歸神經網路、Transformer 等
- **模型集成(Ensemble)**:Bagging、Boosting、Stacking
- **特徵工程與自動化**:Featuretools、Deep Feature Synthesis
- **可解釋性 (XAI)**:SHAP、LIME、Partial Dependence Plots
- **模型部署與服務化**:MLflow、TensorFlow Serving、ONNX
> 在本章結束時,讀者已掌握機器學習的核心概念與常見演算法,並能在實務中自行選擇合適的模型。接下來的章節將深入監督式模型建構,從特徵工程到模型訓練、評估與調優,為你實戰能力打下堅實基礎。