聊天視窗

資料驅動決策:從數據探索到模型部署 - 第 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 > 在本章結束時,讀者已掌握機器學習的核心概念與常見演算法,並能在實務中自行選擇合適的模型。接下來的章節將深入監督式模型建構,從特徵工程到模型訓練、評估與調優,為你實戰能力打下堅實基礎。