何為多標簽分類?這里有幾種實用的經典方法
這可能是最實用的多標簽分類小貼士。
眾所周知,二分類任務旨在將給定的輸入分為 0 和 1 兩類。而多標簽分類(又稱多目標分類)一次性地根據給定輸入預測多個二分類目標。例如,模型可以預測給定的圖片是一條狗還是一只貓,同時預測其毛皮是長還是短。
在多分類任務中,預測目標是互斥的,這意味著一個輸入可以對應于多個分類。本文將介紹一些可能提升多標簽分類模型性能的小技巧。
模型評估函數
通過在「每一列」(分類標簽)上計算模型評估函數并取得分均值,我們可以將大多數二分類評估函數用于多標簽分類任務。對數損失或二分類交叉熵就是其中一種評估函數。為了更好地考慮到類別不均衡現象,我們可以使用 ROC-AUC 作為評估函數。
圖 1:ROC-AUC 曲線
建模技巧
在介紹構建特征的技巧之前,本文將介紹一些設計適用于多標簽分類場景的模型的小技巧。
對于大多數非神經網絡模型而言,我們唯一的選擇是為每個目標訓練一個分類器,然后將預測結果融合起來。為此,「scikit-learn」程序庫提供了一個簡單的封裝類「OneVsRestClassifier」。盡管這個封裝類可以使分類器能夠執行多標簽任務,但我們不應采用這種方法,其弊端如下:(1)我們會為每個目標訓練一個新模型,因此訓練時間相對較長。(2)模型無法學習不同標簽之間的關系或標簽的相關性。
第二個問題可以通過執行一個兩階段訓練過程來解決。其中,我們將目標的預測結果和原始特征相結合,作為第二階段訓練的輸入。這樣做的缺點是,由于需要訓練的模型數量是之前的兩倍,訓練時間將大幅度提升。神經網絡(NN)則適用于這種場景,其中標簽的數量即為網絡中輸出神經元的數量。我們可以直接將任意的二分類損失應用于神經網絡模型,同時該模型會輸出所有的目標。此時,我們只需要訓練一個模型,且網絡可以通過輸出神經元學習不同標簽的相關性,從而解決上文中提出的非神經網絡模型的兩個問題。

圖 2:神經網絡
有監督的特征選擇方法
在開始特征工程或特征選擇之前,需要對特征進行歸一化和標準化處理。使用「scikit-learn」庫中的「Quantile Transformer」將減小數據的偏度,使特征服從正態分布。此外,還可以通過對數據采取「減去均值,除以標準差」的操作,對特征進行標準化處理。該過程與「Quantile Transformer」完成了類似的工作,其目的都是對數據進行變換,使數據變得更加魯棒。然而,「Quantile Transformer」的計算開銷較高。
大多數算法都是為單一目標設計的,因此使用有監督特征選擇方法稍微有些困難。為了解決這個問題,我們可以將多標簽分類任務轉化為多類分類問題。「Label Powerset」就是其中一種流行的解決方案,它將訓練數據中的每一個獨特的標簽組合轉化為一個類。「scikit-multilearn」程序庫中包含實現該方案的工具。

圖 3:Label Powerset 方法
在完成轉換后,我們可以使用「信息增益」和「卡方」等方法來挑選特征。盡管這種方法是可行的,但是卻很難處理上百甚至上千對不同的獨特標簽組合。此時,使用無監督特征選擇方法可能更合適。
無監督特征選擇方法
在無監督方法中,我們不需要考慮多標簽任務的特性,這是因為無標簽方法并不依賴于標簽。典型的無監督特征選擇方法包括:
- 主成分分析(PCA)或其它的因子分析方法。此類方法會去除掉特征中的冗余信息,并為模型抽取出有用的特征。請確保在使用 PCA 之前對數據進行標準化處理,從而使每個特征對分析的貢獻相等。另一個使用 PCA 的技巧是,我們可以將該算法簡化后的數據作為模型可選擇使用的額外信息與原始數據連接起來,而不是直接使用簡化后的數據。
- 方差閾值。這是一種簡單有效的降低特征維度的方法。我們丟棄具有低方差或離散型的特征。可以通過找到一個更好的選擇閾值對此進行優化,0.5 是一個不錯的初始閾值。
- 聚類。通過根據輸入數據創建聚類簇來構建新特征,然后將相應的聚類分配給每一行輸入數據,作為一列新的特征。

圖 4:K - 均值聚類
上采樣方法
當分類數據高度不均衡時,可以使用上采樣方法為稀有類生成人造樣本,從而讓模型關注稀有類。為了在多標簽場景下創建新樣本,我們可以使用多標簽合成少數類過采樣技術(MLSMOTE)。
代碼鏈接:https://github.com/niteshsukhwani/MLSMOTE
該方法由原始的 SMOTE 方法修改而來。在生成少數類的數據并分配少數標簽后,我們還通過統計每個標簽在相鄰數據點中出現的次數來生成其它相關的標簽,并保留出現頻次高于一半統計的數據點的標簽。