AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
31/100 第四週:監督學習(分類)
31. 二元分類與多類別分類 ⚖ 是「是 / 否」還是「紅 / 藍 / 綠」?AI 需要不同策略來處理分類問題!
⚖ 二元分類 vs. 多類別分類
是「是 / 否」,還是「紅 / 藍 / 綠」?AI 需要不同策略來處理分類問題!
________________________________________
📌 1️⃣ 什麼是分類(Classification)?
分類問題是 監督式學習(Supervised Learning) 的一部分,目標是根據 輸入特徵 預測 離散類別(Labels)。
舉例:
• 二元分類(Binary Classification):
o 是否患有心臟病?(是 / 否)
o 電郵是垃圾郵件嗎?(垃圾郵件 / 非垃圾郵件)
o 圖片是狗還是貓?(🐶 / 🐱)
• 多類別分類(Multi-Class Classification):
o 這輛車是什麼品牌?(Toyota / Honda / BMW / Tesla)
o 血型類別?(A / B / AB / O)
o 客戶滿意度評分?(1星 / 2星 / 3星 / 4星 / 5星)
________________________________________
📌 2️⃣ 二元分類 vs. 多類別分類
分類任務可分為二元分類與多類別分類。二元分類針對兩種結果,如「是否生病(是 / 否)」,常見演算法包括邏輯回歸、SVM、決策樹、隨機森林、XGBoost 及類神經網路(ANN)。多類別分類則處理三類以上的結果,如「貓 / 狗 / 鳥」,常用方法有 Softmax 回歸、隨機森林、XGBoost 以及深度學習模型如 CNN 和 ANN。不同演算法依據資料特性與任務需求選擇,以達到最佳分類效果。
✅ 關鍵區別:
1. 輸出類別數不同
2. 多類別分類通常使用 Softmax,而二元分類用 Sigmoid
3. 多類別分類的錯誤計算更複雜
________________________________________
📌 3️⃣ 模型如何處理二元 vs. 多類別分類?
🎯 (1) 二元分類(Binary Classification)
• 使用 Sigmoid 激活函數:將預測值壓縮到 (0,1) 之間
模型先算出一個數值(稱為 z),這個數值是「每個輸入特徵 × 權重後加總起來,再加上一個偏差值(b)」。
接著用 Sigmoid 函數把這個數字轉換成 0 到 1 之間的機率,代表預測為「正類(例如:有病)」的可能性有多高。
• 閾值(Threshold)設定:
o 如果 P(y=1)>0.5,則分類為 正類
o 如果 P(y=1)≤0.5,則分類為 負類
📌 常見方法:
• 邏輯回歸(Logistic Regression)
• 支援向量機(SVM)
• 決策樹(Decision Tree)
• 隨機森林(Random Forest)
• XGBoost
• 深度學習(ANN)
________________________________________
🎯 (2) 多類別分類(Multi-Class Classification)
• 使用 Softmax 激活函數,將輸出轉換為 多個類別的機率分佈
• 選擇機率 最大 的類別作為預測結果
模型先為每個類別產生一個原始分數,接著將這些分數透過以
e 為底的指數運算轉換成正數,這個步驟同時也會放大不同分數之間的差距。然後,將所有類別的指數值加總,最後用每個類別的指數值除以總和,得到該類別的預測機率。
🧠 一句話理解:
Softmax 就是「讓所有分數轉成 0~1 的機率,而且全部加起來剛好是 1」,最後選機率最大的當作預測結果。
📌 常見方法:
• 多類別邏輯回歸(Multinomial Logistic Regression)
• 決策樹 / 隨機森林
• XGBoost / LightGBM
• 神經網路(ANN, CNN)
________________________________________
📌 4️⃣ Python 實作:二元 vs. 多類別分類
我們用 邏輯回歸(Logistic Regression) 來比較 二元分類 和 多類別分類。
________________________________________
✅ (1) 生成數據
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
from sklearn.datasets import make_classification
# 產生二元分類數據
X_binary, y_binary = make_classification(n_samples=500, n_features=2, n_classes=2, random_state=42)
# 產生多類別分類數據(3 類別)
X_multi, y_multi = make_classification(n_samples=500, n_features=2, n_classes=3, n_clusters_per_class=1, random_state=42)
# 分割數據
X_train_bin, X_test_bin, y_train_bin, y_test_bin = train_test_split(X_binary, y_binary, test_size=0.2, random_state=42)
X_train_multi, X_test_multi, y_train_multi, y_test_multi = train_test_split(X_multi, y_multi, test_size=0.2, random_state=42)
📌 數據概覽:
• X_binary, y_binary:二元分類數據
• X_multi, y_multi:多類別分類數據(3 類別)
________________________________________
✅ (2) 訓練二元分類模型
python
# 訓練二元分類邏輯回歸模型
model_bin = LogisticRegression()
model_bin.fit(X_train_bin, y_train_bin)
# 預測
y_pred_bin = model_bin.predict(X_test_bin)
# 評估
print("🔹 二元分類結果 🔹")
print(f"Accuracy: {accuracy_score(y_test_bin, y_pred_bin):.2f}")
print(classification_report(y_test_bin, y_pred_bin))
📌 結果解讀:
• Accuracy(準確率):模型正確分類的比例
• 分類報告(Precision, Recall, F1-Score):不同類別的預測效果
________________________________________
✅ (3) 訓練多類別分類模型
python
# 訓練多類別分類邏輯回歸模型
model_multi = LogisticRegression(multi_class="multinomial", solver="lbfgs")
model_multi.fit(X_train_multi, y_train_multi)
# 預測
y_pred_multi = model_multi.predict(X_test_multi)
# 評估
print("🔹 多類別分類結果 🔹")
print(f"Accuracy: {accuracy_score(y_test_multi, y_pred_multi):.2f}")
print(classification_report(y_test_multi, y_pred_multi))
📌 結果解讀
• Softmax 回歸適用於多類別分類
• 評估指標與二元分類類似,但有更多類別的預測結果
________________________________________
📌 5️⃣ 模型選擇建議
分類問題 推薦方法
二元分類: Logistic Regression, SVM, Decision Tree, XGBoost, ANN
多類別分類(少數類別): Softmax Regression, Decision Tree, Random Forest
多類別分類(大量類別): XGBoost, LightGBM, ANN, CNN
📌 二元分類 vs. 多類別分類
• 二元分類適用 Sigmoid
• 多類別分類適用 Softmax
• 多類別問題可轉為多個二元分類(One-vs-All, One-vs-One)
________________________________________
📌 6️⃣ 總結
✅ 二元分類(Binary Classification)適用於 2 類別問題,使用 Sigmoid 激活函數
✅ 多類別分類(Multi-Class Classification)適用於 3 個以上類別,使用 Softmax 激活函數
✅ 二元分類與多類別分類的模型選擇有所不同,可根據數據類型決定最適合的方法
✅ XGBoost、隨機森林、深度學習(ANN, CNN)是目前最強的分類技術!
🚀 下一步:探索「不平衡分類數據處理」技術,如 SMOTE 和權重調整!⚖