前 言
對于整個數(shù)據(jù)建模來看,數(shù)據(jù)均衡算法屬于數(shù)據(jù)預處理一環(huán)。當整個數(shù)據(jù)集從調(diào)出數(shù)據(jù)庫到拿到手的時候,對于分類數(shù)據(jù)集來說類別一般都是不均衡的,整個數(shù)據(jù)集合也是較為離散的。因此不可能一拿到數(shù)據(jù)集就可進行建模,類別的不均衡會極大影響建模判斷準確率。
其中,我們希望整個數(shù)據(jù)集合的類別數(shù)目都是相似的,這樣其特征數(shù)據(jù)權重能夠更好的計算出來,便于分類。對于預測模型也是如此。數(shù)據(jù)均衡是整個數(shù)學建模以及研究最重要不得不重視的一環(huán),下面我將詳細介紹數(shù)據(jù)均衡的方法以及運用的不同場景。
一、為什么要做數(shù)據(jù)均衡?
首先在進行實驗之前我們要了解數(shù)據(jù)均衡的重要性,這是一件值得我們?nèi)ネ度氡姸嗑Φ氖隆R坏?shù)據(jù)均衡做的不好將極大可能影響模型的準確性。數(shù)據(jù)預處理決定我們模型的上限,在一些重要的數(shù)學建模比賽或者是SCI論文中,數(shù)據(jù)均衡絕對是濃墨重彩的一環(huán)。我們可以這樣思考:
我們現(xiàn)在需要對一種疾病進行甄別,該病的發(fā)病概率為2%,而且很嚴重,100個人之間就可能會有2個人攜帶病毒。現(xiàn)在我們需要根據(jù)該病的特征數(shù)據(jù)構建能夠判斷患病的人。如果我們不進行數(shù)據(jù)均衡,倘若我們獲得了10000份人的檢測指標數(shù)據(jù),其中有200人被標記為患病。那么我們立刻進行建模,因為患病人群數(shù)量極少,那么模型根據(jù)每一次特征權重計算反復迭代,獲取最優(yōu)的結果。那該模型為何不直接把判斷人員數(shù)據(jù)歸為健康人群呢。這樣一來不管是判斷的人群是否有無此病都能夠得到98%的正確率甚至更高。那么我們的模型意義何在?
若是根據(jù)這個模型,再給10份數(shù)據(jù)其中有5份是患病者數(shù)據(jù),那么此時建立的模型絲毫沒有用處,甚至造成嚴重的后果。所以說數(shù)據(jù)均衡是整個建模中很重要的一環(huán)。如果我們一開始就把這200份患病者的指標進行數(shù)據(jù)填充與健康數(shù)據(jù)均衡,那樣我們還能夠發(fā)現(xiàn)獲得該病之后的指標顯著特征,為后續(xù)醫(yī)生的判斷提供有力的支持。因此數(shù)據(jù)均衡是必不可少的一環(huán),現(xiàn)在讓我們來了解根據(jù)數(shù)據(jù)集場景的不同我們該如何進行數(shù)據(jù)均衡。
二、數(shù)據(jù)場景
1.大數(shù)據(jù)分布不均衡
拿兩個我所遇到過的場景建模來說,第一個網(wǎng)絡用戶購買行為數(shù)據(jù)集來說,共擁有十三萬行的數(shù)據(jù)中僅3千條用戶購買行為數(shù)據(jù),如圖所示。這樣大數(shù)據(jù)量的不均衡情況,即為大數(shù)據(jù)量不均衡。
2.小數(shù)據(jù)分布不均衡
大數(shù)據(jù)量的不均衡情況居多,但難免有一些指標很難測量的場景。就如醫(yī)學疾病檢測。
如圖所示,該數(shù)據(jù)量小,僅有一萬數(shù)據(jù)量,患病人數(shù)僅只有百名。這樣的數(shù)據(jù)情況就為小數(shù)據(jù)分布不均衡。
這兩類數(shù)據(jù)不均衡情況都有適合它們的處理算法。
三、均衡算法類型
在機器學習和深度學習中兩者含義不同,但是思想方法類似。一個為數(shù)據(jù)中的采樣方法,一個為圖片的縮小和放大,這里重點解釋機器學習的采樣類型。
1.過采樣
過采樣也被稱為上采樣,這個方法更適用于小數(shù)據(jù)分布不均衡。如果是大數(shù)據(jù)分布不均衡,則將原來的小份類別不同的數(shù)據(jù)集擴充到與類別不同的數(shù)據(jù)集對等大小的情況。如第一個例子的數(shù)據(jù),若進行過采樣,則將會有超過26萬的數(shù)據(jù)生成。與欠采樣相比計算權重比例以及運算時間都會大大增加。甚至可能造成過擬合現(xiàn)象。而小數(shù)據(jù)分布不均衡運用該方法還能避免數(shù)據(jù)量太少引起的欠擬合。
以下是過采樣效果圖,圖一為原始數(shù)據(jù)集。
2.欠采樣
欠采樣也被稱為下采樣,一般將將較大的類別數(shù)據(jù)進行縮減,直至和類型不同的小量數(shù)據(jù)集相對等。如我們將例子一的數(shù)據(jù)進行欠采樣,13w的用戶行為數(shù)據(jù)將縮減至6730條數(shù)據(jù),進行建模的速度將會大大的加快。
以下是欠采樣算法效果圖:
3.組合采樣
不論是過采樣和欠采樣都會與原數(shù)據(jù)集存在一定的誤差,過采樣會導致很多樣本的數(shù)據(jù)特征與原樣本數(shù)據(jù)重疊導致難以分類清楚。而數(shù)據(jù)清洗技術恰好可以處理掉重疊樣本,所以可以將二者結合起來形成一個組合采樣,先過采樣再進行數(shù)據(jù)清洗。
四、算法具體種類
以Imbalancd sklearn庫收錄的算法來看,過采樣共有11種方法,欠采樣共有8種方法,組合采樣有2種方法。
下面我們將從過采樣-欠采樣-組合采樣大體三個類型的算法逐個了解其重算法種類的大致功能作用,以及使用場景:
1.欠采樣算法
(1)RandomUnderSampler
隨機欠采樣是十分快捷的方式,從多數(shù)類樣本中隨機選取一些剔除掉。但是隨著采樣方法的研究和發(fā)展隨機欠采樣已經(jīng)很少使用。隨機欠采樣會損失大量的數(shù)據(jù),可能被剔除的樣本可能包含著一些重要信息,導致后續(xù)建模模型質(zhì)量并不是很好。
(2)ClusterCentroids
通過使用K-Means聚類質(zhì)心代替一個多數(shù)類的聚類,從而對多數(shù)類進行欠采樣。通過帶有N個聚類的KMeans算法擬合到多數(shù)類,并以N個聚類質(zhì)心的坐標作為新的多數(shù)樣本,從而保留N個多數(shù)樣本。這和K-means方法原理是一樣的。
(3)CondensedNearestNeighbour
CondensedNearestNeighbour 使用1近鄰的方法來進行迭代, 來判斷一個樣本是應該保留還是剔除, 具體的實現(xiàn)步驟如下:
集合C: 所有的少數(shù)類樣本;
1 選擇一個多數(shù)類樣本(需要下采樣)加入集合C, 其他的2 這類樣本放入集合S;
3 使用集合S訓練一個1-NN的分類器, 對集合S中的樣本進行分類;
4 將集合S中錯分的樣本加入集合C;
5 重復上述過程, 直到?jīng)]有樣本再加入到集合C.
(4)EditedNearestNeighbours
(5)RepeatedEditedNearestNeighbours
EditedNearestNeighbours刪除其類別與其最近鄰之一不同的多數(shù)類別的樣本。這就是原理 RepeatedEditedNearestNeighbours。通過更改內(nèi)部最近鄰算法的參數(shù),在每次迭代中增加它,與AllKNN略有不同 。
(6)AllKNN
與RepeatedEditedNearestNeighbours不同的是,該算法內(nèi)部的最近鄰算法的近鄰數(shù)在每次迭代中都會增加。
代碼在上面統(tǒng)一概括了,此三類算法類似,只不過都以EditedNearestNeighbours為基礎在此上進行優(yōu)化:
(7)InstanceHardnessThreshold
InstanceHardnessThreshold使用分類器的預測來排除樣本。所有以低概率分類的樣本都將被刪除。
(8)NearMiss
NearMiss算法實施一些啟發(fā)式規(guī)則以選擇樣本。NearMiss-1 從多數(shù)類中選擇最近的少數(shù)類樣本的平均距離最小的樣本。NearMiss-2 從多數(shù)類中選擇與負類最遠樣本的平均距離最小的樣本。NearMiss-3 是一個兩步算法:首先,對于每個少數(shù)樣本, 將保留其最近鄰;然后,選擇的大多數(shù)樣本是與最近鄰居的平均距離最大的樣本。
(9)NeighbourhoodCleaningRul
NeighbourhoodCleaningRule使用 EditedNearestNeighbours刪除一些樣本。此外,他們使用 3 個最近鄰刪除不符合此規(guī)則的樣本。
代碼已貼在CondensedNearestNeighbour那一欄:
(10)OneSidedSelection
使用了 1-NN 并用于TomekLinks刪除被認為有噪聲的樣本。
代碼已貼在CondensedNearestNeighbour那一欄:
(11) TomekLinks
TomekLinks :樣本x與樣本y來自于不同的類別,滿足以下條件,它們之間被稱之為TomekLinks:不存在另外一個樣本z,使得d(x,z) < d(x.y)或者d(y,z) < d(x,y)成立.其中d(.)表示兩個樣本之間的距離,也就是說兩個樣本之間互為近鄰關系.這個時候,樣本x或樣本y很有可能是噪聲數(shù)據(jù),或者兩個樣本在邊界的位置附近。
TomekL inks函數(shù)中的auto參數(shù)控制Tomek' s links中的哪些樣本被剔除.默認的ratio= 'auto'’ 移除多 數(shù)類的樣本,當ratio='ll'時,兩個樣本均被移除。
2.過采樣算法
在隨機過采樣的基礎上,通過樣本構造一方面降低了直接復制樣本代理的過擬合的風險,另一方法實現(xiàn)了樣本的均衡。比如樣本構造方法 SMOTE(Synthetic minority over-sampling technique)及其衍生算法。
(1)SMOTE
通過從少量樣本集合中篩選的樣本 和 及對應的隨機數(shù) ,通過兩個樣本間的關系來構造新的樣本 。SMOTE算法的基本思想是對少數(shù)類樣本進行分析并根據(jù)少數(shù)類樣本人工合成新樣本添加到數(shù)據(jù)集中,具體如下圖所示,算法流程如下:
1 對于少數(shù)類中每一個樣本 ,以歐氏距離為標準計算它到少數(shù)類樣本集中所有樣本的距離,得到其 k 近鄰。
2 根據(jù)樣本不平衡比例設置一個采樣比例以確定采樣倍率N,對于每一個少數(shù)類樣本 ,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為 。
3 對于每一個隨機選出的近鄰 ,分別與原樣本 按照如下的公式構建新的樣本。
偽代碼:
SMOTE會隨機選取少數(shù)類樣本用以合成新樣本,而不考慮周邊樣本的情況,這樣容易帶來兩個問題:
1 如果選取的少數(shù)類樣本周圍也都是少數(shù)類樣本,則新合成的樣本不會提供太多有用信息。這就像支持向量機中遠離margin的點對決策邊界影響不大。
2 如果選取的少數(shù)類樣本周圍都是多數(shù)類樣本,這類的樣本可能是噪音,則新合成的樣本會與周圍的多數(shù)類樣本產(chǎn)生大部分重疊,致使分類困難。
總的來說我們希望新合成的少數(shù)類樣本能處于兩個類別的邊界附近,這樣往往能提供足夠的信息用以分類。
(2)RandomOverSampler
從樣本少的類別中隨機抽樣,再將抽樣得來的樣本添加到數(shù)據(jù)集中。然而這種方法如今已經(jīng)不大使用了,因為重復采樣往往會導致嚴重的過擬合,因而現(xiàn)在的主流過采樣方法是通過某種方式人工合成一些少數(shù)類樣本,從而達到類別平衡的目的。
BorderlineSMOTE、KMeansSMOTE、SVMSMOTE
SMOTE通過識別在重采樣期間要考慮的特定樣本來提出幾種變體。邊界版本 ( BorderlineSMOTE) 將檢測在兩個類之間的邊界中選擇哪個點。SVM 版本 ( SVMSMOTE) 將使用使用 SVM 算法找到的支持向量來創(chuàng)建新樣本,而 KMeans 版本 ( KMeansSMOTE) 將在之前進行聚類,根據(jù)每個集群密度在每個集群中獨立生成樣本。
在處理連續(xù)和分類特征的混合時, SMOTENC是唯一可以處理這種情況的方法。
但是,如果數(shù)據(jù)集僅由分類特征組成,則應使用SMOTEN.:
(4)ADASYN
不平衡學習的自適應綜合采樣方法,
ADASYN思想:基于根據(jù)少數(shù)類數(shù)據(jù)樣本的分布自適應地生成少數(shù)類數(shù)據(jù)樣本的思想:與那些更容易學習的少數(shù)類樣本相比,更難學習的少數(shù)類樣本會生成更多的合成數(shù)據(jù)。ADASYN方法不僅可以減少原始不平衡數(shù)據(jù)分布帶來的學習偏差,還可以自適應地將決策邊界轉移到難以學習的樣本上。
關鍵思想是使用密度分布作為標準來自動決定需要為每個少數(shù)類樣本生成的合成樣本的數(shù)量。從物理上來說,是根據(jù)不同少數(shù)族的學習難度來衡量他們的權重分布。ADASYN后得到的數(shù)據(jù)集不僅將提供數(shù)據(jù)分布的平衡表示(根據(jù)β系數(shù)定義的期望平衡水平),還將迫使學習算法關注那些難以學習的樣本。
3.組合采樣
分別在Kinetic數(shù)據(jù)集和NTU-RGB+D數(shù)據(jù)集上進行實驗。
(1)SMOTETomek、SMOTEENN
SMOTE允許生成樣本。但是,這種過采樣方法對底層分布沒有任何了解。因此,可能會生成一些噪聲樣本,例如,當不同的類別不能很好地分離時。因此,應用欠采樣算法來清理噪聲樣本可能是有益的。文獻中通常使用兩種方法:(i)Tomek 的鏈接和(ii)編輯最近鄰清理方法。不平衡學習提供了兩個即用型采樣器SMOTETomek和 SMOTEENN.
審核編輯:劉清
-
算法
+關注
關注
23文章
4738瀏覽量
96713 -
過采樣
+關注
關注
0文章
22瀏覽量
9862 -
均衡算法
+關注
關注
0文章
13瀏覽量
9005
原文標題:機器學習丨數(shù)據(jù)均衡算法種類大全+Python代碼一文詳解
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
EPS應急電源中均衡式充電裝置的設計

80SJNB Advanced 均衡和串行數(shù)據(jù)分析方法
ADC模塊剩余代碼的編寫以及模塊的運用方法
DS1302模塊剩余代碼的編寫以及運用方法
介紹EEPROM模塊剩余代碼的編寫以及模塊的運用方法
串聯(lián)鋰離子電池組的均衡詳細介紹
多租戶環(huán)境下多機群網(wǎng)格數(shù)據(jù)負載均衡方法

超詳細!使用 LVS 實現(xiàn)負載均衡原理及安裝配置詳解
均衡器數(shù)字代表什么_均衡器的調(diào)整方法詳解

一文看懂電視聲音均衡器調(diào)節(jié)方法
如何確定適合的負載均衡比例
nginx負載均衡配置介紹

評論