搜尋意圖: 如果你在找「類別加權 是什麼」或「類別加權 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: 在分類模型訓練時對不同類別樣本賦予不同損失權重的技術,用於緩解資料類別不平衡問題,使模型更重視少數類別。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
在分類模型訓練時對不同類別樣本賦予不同損失權重的技術,用於緩解資料類別不平衡問題,使模型更重視少數類別。
Class Weighting(類別加權)是機器學習實務中面對資料不平衡問題的核心解法之一,在醫療診斷、詐騙偵測、異常偵測、自然語言處理中的罕見實體辨識等場景中廣泛應用。
問題根源:類別不平衡
真實世界的資料集往往存在嚴重的類別不平衡,多數類別樣本數可能是少數類別的數十倍甚至數千倍。以信用卡詐騙偵測為例,詐騙交易可能只佔所有交易的 0.1%;以醫療影像中的腫瘤偵測為例,陰性(健康)樣本遠多於陽性(腫瘤)樣本。若直接使用這類不平衡資料訓練分類器,模型很快學到「永遠預測多數類別」的捷徑策略,在整體準確率(Accuracy)上表現不錯,但少數類別的召回率(Recall)可能趨近於零,對業務毫無價值。
類別加權的運作機制
類別加權透過修改損失函數(Loss Function)來解決上述問題。在標準交叉熵損失中,每個樣本的貢獻是均等的;加入類別權重後,少數類別的每個樣本在反向傳播時產生更大的梯度貢獻,迫使模型更認真學習少數類別的特徵。常見的權重計算方式有兩種。一是反頻率加權(Inverse Frequency Weighting):類別 k 的權重 = 總樣本數 / (類別數 × 類別 k 樣本數),數量最少的類別獲得最高權重。二是手動設定:根據業務需求主觀設定權重,例如將詐騙交易的誤分類懲罰設為正常交易的 10 倍,反映詐騙漏報(False Negative)的業務損失遠大於誤報(False Positive)的客戶服務成本。
實作方式
在主流深度學習框架中,類別加權的實作都相當直接。在 scikit-learn 中,大多數分類器(如 LogisticRegression、RandomForestClassifier、SVM)都有 class_weight 參數,設為 'balanced' 即可自動根據各類別頻率計算反頻率權重,或傳入自訂字典指定每個類別的權重值。在 PyTorch 中,使用 torch.nn.CrossEntropyLoss(weight=class_weights_tensor) 傳入類別權重張量。在 TensorFlow/Keras 中,可在 model.fit() 的 class_weight 參數中傳入字典。值得注意的是,類別加權作用於損失函數計算,不改變原始資料集,因此不會增加資料儲存量也不影響批次組成。
類別加權 vs. 重採樣方法
類別加權並非處理類別不平衡的唯一方法,另一類常見方法是重採樣(Resampling)。過採樣(Oversampling)透過複製少數類別樣本或生成合成樣本(如 SMOTE 演算法)來增加少數類別的比例;欠採樣(Undersampling)則刪除部分多數類別樣本以平衡比例。類別加權相比重採樣的優勢在於:不改變資料集本身、不增加訓練時間(過採樣會增加資料量)、也不丟失資訊(欠採樣會捨棄多數類別樣本)。劣勢是對非常極端的不平衡比(如 1:10000)效果可能不如 SMOTE 等合成方法,因為模型仍然很少接觸到少數類別樣本的多樣性。
在 iPAS 考試中的考點
在 iPAS AI 應用規劃師初級與中級考試中,Class Weighting 是分類任務資料前處理章節的常考知識點。考生需要能識別:當 F1-score 或 Recall 顯著低於 Precision 時,可能存在類別不平衡問題;class_weight='balanced' 是處理不平衡分類資料的快速解法;以及理解類別加權、過採樣與欠採樣三種方法的適用場景與取捨。
評估指標的選擇
使用類別加權後,評估模型不應再單純看 Accuracy,因為 Accuracy 受多數類別主導,無法反映少數類別的辨識能力。應改為關注 Precision(精確率)、Recall(召回率)、F1-Score 及 AUC-ROC 曲線。在業務上,通常需要根據 FP(誤報)與 FN(漏報)的代價比例調整分類閾值(Threshold),而非直接使用預設的 0.5 閾值。在詐騙偵測場景中,漏報的代價(損失金額)遠高於誤報(客服成本),因此可能將閾值調低至 0.3,以提高 Recall 換取較高的 FP 率。
進階應用:Focal Loss
Focal Loss 是 Class Weighting 概念的進階版本,由 Facebook AI Research 於 2017 年在目標偵測論文中提出。Focal Loss 在交叉熵損失的基礎上加入調制因子 (1-p_t)^γ,讓已被模型輕鬆分類的樣本(高置信度正確預測)產生更小的損失貢獻,而讓困難樣本(低置信度或容易混淆的樣本)獲得更高的關注。這個設計解決了標準 Class Weighting 無法區分「容易的少數類別樣本」與「困難的少數類別樣本」的限制,在極端不平衡的目標偵測任務(如物件偵測中背景 anchor 數量遠多於物件 anchor)中表現尤為出色。
常見問題
什麼時候應該用 class_weight='balanced',什麼時候要手動設定權重?
class_weight='balanced' 適用於快速建立基準模型(Baseline)的情況,它根據各類別的樣本數自動計算反頻率權重,不需要任何領域知識。手動設定權重則適用於業務需求對不同錯誤類型有明確代價估算的場景。例如醫療診斷中,漏診(False Negative)的代價遠高於誤診(False Positive),此時應根據兩種錯誤的業務代價比設定非對稱權重,而非完全依賴統計頻率。建議先用 balanced 建立基準,再根據混淆矩陣分析業務影響後決定是否手動微調。
類別加權和 SMOTE 過採樣哪個效果更好?
沒有絕對優劣,需視情況而定。類別加權不改變資料集,訓練速度快,適合不平衡比在 1:100 以內的場景;其缺點是少數類別樣本仍然稀少,模型對少數類別的多樣性學習有限。SMOTE 在少數類別的樣本間插值生成合成樣本,讓模型接觸到更多樣的少數類特徵,對於極度不平衡(1:1000 以上)通常效果更佳,但會增加訓練資料量與訓練時間,且合成樣本可能引入噪音。實務建議是同時嘗試兩種方法,用交叉驗證的 F1-Score 來選擇。
用了類別加權後,測試集評估時還需要用加權嗎?
不需要。類別加權只作用於訓練階段的損失函數計算,目的是讓模型學習時更重視少數類別。在測試集評估時,應使用未加權的原始預測結果,反映模型在真實資料分佈下的表現。評估指標的選擇也很重要:應報告每個類別的 Precision 和 Recall,以及整體的 Macro F1-Score(各類別 F1 的算術平均)而非 Accuracy,這樣才能真實反映模型對少數類別的辨識能力,而不被多數類別的高準確率掩蓋。