? 今日目標
- 理解分類(Classification)與回歸(Regression)的本質區別
- 掌握兩種任務的典型使用場景
- 學會根據任務類型選擇合適的模型
- 了解每類模型對應的評估指標
📘 一、監督學習的兩大任務類型
任務類型 | 輸出結果 | 典型問題 | 示例 |
---|---|---|---|
分類(Classification) | 離散值(類標) | 哪一類? | 是否及格?是否點擊廣告? |
回歸(Regression) | 連續值(實數) | 預測值是多少? | 房價預測、成績分數 |
🧪 二、任務類型示例(Python 實踐)
分類任務示例:
# 分類:預測學生是否及格(0 或 1)
y_class = [0, 1, 1, 0, 1, 1, 0]
回歸任務示例:
# 回歸:預測學生具體分數(連續值)
y_reg = [59.5, 85.2, 90.1, 62.0, 74.8]
🧮 三、模型適用對比
模型 | 分類 | 回歸 |
---|---|---|
Logistic 回歸 | ? | ? |
線性回歸 | ? | ? |
決策樹 | ? | ? |
隨機森林 | ? | ? |
SVM | ? | ?(需配置) |
KNN | ? | ? |
XGBoost / LightGBM | ? | ? |
📊 四、評估指標對比
指標類型 | 分類任務 | 回歸任務 |
---|---|---|
主要指標 | 準確率(accuracy) 精確率 / 召回率 / F1 | 均方誤差(MSE) 平均絕對誤差(MAE) R2 |
可視化 | 混淆矩陣、ROC曲線 | 擬合曲線、殘差圖 |
推薦工具 | classification_report() | mean_squared_error() / r2_score() |
💡 五、任務識別技巧
當你拿到一個數據問題時,可以問自己:
- 目標變量是類別還是數值?
- 是判斷“是否……”,還是預測“多少……”?
- 標簽值有多少種?是整數編碼的類別,還是連續的數值?
🔧 六、實踐建議
-
自構造一個小型分類與回歸數據集
-
分別使用邏輯回歸與線性回歸模型進行建模
-
輸出評估結果(準確率 / 均方誤差)
-
可視化預測結果與真實值對比(選做)
# 分類 vs 回歸任務演示from sklearn.linear_model import LogisticRegression, LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, accuracy_score, mean_squared_error, r2_score import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.family'] = 'Arial Unicode MS' # Mac 用戶可用 plt.rcParams['axes.unicode_minus'] = False# 構造數據 np.random.seed(42) score_class = np.random.randint(40, 100, 100) is_pass = (score_class >= 60).astype(int) score_reg = score_class + np.random.normal(0, 5, 100)# 分類任務 X_class = score_class.reshape(-1, 1) y_class = is_pass Xc_train, Xc_test, yc_train, yc_test = train_test_split(X_class, y_class, test_size=0.2, random_state=0)clf = LogisticRegression() clf.fit(Xc_train, yc_train) y_pred_class = clf.predict(Xc_test)print("=== 分類評估 ===") print("準確率:", accuracy_score(yc_test, y_pred_class)) print(classification_report(yc_test, y_pred_class))# 回歸任務 X_reg = score_class.reshape(-1, 1) y_reg = score_reg Xr_train, Xr_test, yr_train, yr_test = train_test_split(X_reg, y_reg, test_size=0.2, random_state=0)reg = LinearRegression() reg.fit(Xr_train, yr_train) y_pred_reg = reg.predict(Xr_test)print("\n=== 回歸評估 ===") print("MSE:", mean_squared_error(yr_test, y_pred_reg)) print("R2:", r2_score(yr_test, y_pred_reg))# 可視化回歸結果 plt.scatter(Xr_test, yr_test, color='blue', label='真實值') plt.plot(Xr_test, y_pred_reg, color='red', label='預測值') plt.title("回歸擬合示意圖") plt.xlabel("原始成績") plt.ylabel("預測成績") plt.legend() plt.tight_layout() plt.show()
運行輸出:
=== 分類評估 === 準確率: 1.0precision recall f1-score support0 1.00 1.00 1.00 71 1.00 1.00 1.00 13accuracy 1.00 20macro avg 1.00 1.00 1.00 20 weighted avg 1.00 1.00 1.00 20=== 回歸評估 === MSE: 20.031221042762812 R2: 0.9221734051498227
🧾 今日總結
內容 | 分類任務 | 回歸任務 |
---|---|---|
輸出 | 類別標簽(0/1) | 連續實數值 |
代表模型 | Logistic 回歸、樹 | 線性回歸、樹 |
核心指標 | Accuracy、F1 | MSE、R2 |
常見場景 | 醫療診斷、信用預測 | 銷量預測、價格估計 |