數(shù)據(jù)的不平衡問題是在機器學習中常遇到的問題,特別是在數(shù)據(jù)化運營過程中,經(jīng)常產(chǎn)生樣本分布不均衡,但不平衡的樣本在訓練中通常會影響模型的訓練,那么如何可以更好的解決數(shù)據(jù)類別不平衡問題呢?
我們從兩個層面和維度來看解決數(shù)據(jù)類別不平衡問題的方案:
從數(shù)據(jù)層面解決類別不平衡問題
數(shù)據(jù)層面的方法主要包括過樣本、數(shù)據(jù)動態(tài)采樣、數(shù)據(jù)合成:
過抽樣
過抽樣(也叫上采樣、over-sampling)方法通過增加分類中少數(shù)類樣本的數(shù)量來實現(xiàn)樣本均衡,最直接的方法是簡單復制少數(shù)類樣本形成多條記錄,這種方法的缺點是如果樣本特征少而可能導致過擬合的問題;經(jīng)過改進的過抽樣方法通過在少數(shù)類中加入隨機噪聲、干擾數(shù)據(jù)或通過一定規(guī)則產(chǎn)生新的合成樣本,例如SMOTE算法。
欠抽樣
欠抽樣(也叫下采樣、under-sampling)方法通過減少分類中多數(shù)類樣本的樣本數(shù)量來實現(xiàn)樣本均衡,最直接的方法是隨機地去掉一些多數(shù)類樣本來減小多數(shù)類的規(guī)模,缺點是會丟失多數(shù)類樣本中的一些重要信息。
動態(tài)采樣就是將根據(jù)訓練結(jié)果對數(shù)據(jù)集進行動態(tài)調(diào)整,對結(jié)果較好的類別進行隨機刪除樣本操作,對結(jié)果較差的類別進行隨機復制操作,以保證分類模型每次學習都能學到相關的信息。
生成合成數(shù)據(jù)是從少數(shù)類創(chuàng)建新的合成點,以增加其基數(shù)。合成方法指的是在每次生成訓練集時使用所有分類中的小樣本量,同時從分類中的大樣本量中隨機抽取數(shù)據(jù)來與小樣本量合并構成訓練集,這樣反復多次會得到很多訓練集和訓練模型。最后在應用時,使用組合方法(例如投票、加權投票等)產(chǎn)生分類預測結(jié)果。
例如,在數(shù)據(jù)集中的正、負例的樣本分別為100和10000條,比例為1:100。此時可以將負例樣本(類別中的大量樣本集)隨機分為100份(當然也可以分更多),每份100條數(shù)據(jù);然后每次形成訓練集時使用所有的正樣本(100條)和隨機抽取的負樣本(100條)形成新的數(shù)據(jù)集。如此反復可以得到100個訓練集和對應的訓練模型。
這種解決問題的思路類似于隨機森林。在隨機森林中,雖然每個小決策樹的分類能力很弱,但是通過大量的“小樹”組合形成的“森林”具有良好的模型預測能力。
SMOTE算法的基本思想是對少數(shù)類樣本進行分析并根據(jù)少數(shù)類樣本人工合成新樣本添加到數(shù)據(jù)集中,具體下圖所示,算法流程如下:
1、對于少數(shù)類中每一個樣本x,計算該點與少數(shù)類中其他樣本點的距離,得到最近的k個近鄰(即對少數(shù)類點進行KNN算法)。
2、根據(jù)樣本不平衡比例設置一個采樣比例以確定采樣倍率,對于每一個少數(shù)類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為x'。
3、對于每一個隨機選出的近鄰x',分別與原樣本按照如下的公式構建新的樣本:
xnew=x+rand(0,1)?(x′?x)
但是SMOTE算法缺點也十分明顯:一方面是增加了類之間重疊的可能性(由于對每個少數(shù)類樣本都生成新樣本,因此容易發(fā)生生成樣本重疊(Overlapping)的問題),
另一方面是生成一些沒有提供有益信息的樣本。
除了重采樣的方法外,還可以在數(shù)據(jù)集中添加多個其他特征來豐富數(shù)據(jù)集,這樣可能獲得更好的準確率結(jié)果。針對兩個類無法很好地分離開來,我們附加一個新的特征幫助分離兩個類:
基于算法層面解決類別不平衡問題
在介紹之前,我們首先要理解兩個概念精度和召回率:
- 高精度+高召回率:模型能夠很好地檢測該類;
- 高精度+低召回率:模型不能很好地檢測該類,但是在它檢測到這個類時,判斷結(jié)果是高度可信的;
- 低精度+高召回率:模型能夠很好地檢測該類,但檢測結(jié)果中也包含其他類的點;
- 低精度+低召回率:模型不能很好地檢測該類。
但是這種評估并不符合現(xiàn)實的情況,而結(jié)果不好的根本原因在于目標函數(shù)沒有得到很好的定義。截至此時,我們一直假設分類器具備高準確率,同時假設兩類錯誤(「假陽性」和「假陰性」)具有相同的成本(cost)。在我們的例子中,這意味著真實標簽為C1、預測結(jié)果為C0與真實標簽為C0、預測結(jié)果為C1一樣糟糕,錯誤是對稱的。然而實際情況往往不是這樣。
讓我們考慮本文第一個例子,關于有缺陷(C1)和無缺陷(C0)產(chǎn)品。可以想象,對公司而言,沒有檢測到有缺陷的產(chǎn)品的代價遠遠大于將無缺陷的產(chǎn)品標注為有缺陷產(chǎn)品(如客戶服務成本、法律審判成本等)。因此在真實案例中,錯誤的代價是不對稱的。
因此,我們需要
基于算法層面的方法主要對現(xiàn)有的深度學習算法進行改進,通過修改損失函數(shù)或?qū)W習方式的方法來消除類別不平衡帶來的影響。
通過調(diào)整網(wǎng)絡結(jié)果的輸出閾值來改善類別不平衡的問題。模型設計者根據(jù)數(shù)據(jù)集的構成和輸出的概率值,人工設計一個合理的閾值,以降低樣本數(shù)目較少的類別的輸出要求,使得其預測結(jié)果更加合理。
在分類器中考慮成本的第一種可行方法是在訓練后進行,也即按照基本的方法訓練分類器,輸出如下概率:
這里沒有考慮任何成本。然后,如果滿足下述條件
則預測類為C0,否則為C1。
這里,只要輸出給定點的每個類的概率,使用哪個分類器并不重要。在我們的例子中,我們可以在數(shù)據(jù)上擬合貝葉斯分類器,然后對獲得的概率重新加權,根據(jù)成本誤差來調(diào)整分類器。
類重新加權(classreweight),即在分類器訓練期間直接考慮成本誤差的不對稱性,這使每個類的輸出概率都嵌入成本誤差信息。然后這個概率將用于定義具有0.5閾值的分類規(guī)則。
對于某些模型(例如神經(jīng)網(wǎng)絡分類器),我們可以在訓練期間通過調(diào)整目標函數(shù)來考慮成本。我們?nèi)匀幌M诸惼鬏敵?/p>
但是這次的訓練將使以下的成本函數(shù)最小化
對于一些其他模型(例如貝葉斯分類器),我們可以使用重采樣方法來偏置類的比例,以便在類比例內(nèi)輸入成本誤差信息。如果考慮成本P01和P10(如P01>P10),我們可以:
- 對少數(shù)類按照P01/P10的比例進行過采樣(少數(shù)類的基數(shù)乘以P01/P10);
- 對多數(shù)類按照P10/P01的比例進行欠采樣(多數(shù)類的基數(shù)乘以P10/P01)。
類重新加權方法:多數(shù)類按比例進行欠采樣,這樣可以直接在類比例中引入成本信息總結(jié)