02 特征工程 - 數(shù)據(jù)不平衡

01 特征工程 - 概念

數(shù)據(jù)清洗過程:

PS:工作中可能遇到的最大的問題是數(shù)據(jù)不均衡。
怎么去解決的? 上采樣、下采樣、SMOTE算法。
解決的效果如何? 有一點點改進,但不是很大。
事實上確實如此,很多時候即使用了上述算法對采樣的數(shù)據(jù)進行改進,但是結(jié)果反而可能更差。在業(yè)界中,對數(shù)據(jù)不均衡問題的處理確實是一件比較頭疼的問題。最好的處理方法還是:盡可能去獲得更多的那些類別比較少的數(shù)據(jù)。


數(shù)據(jù)不平衡概念

在實際應(yīng)用中,數(shù)據(jù)往往分布得非常不均勻,也就是會出現(xiàn)“長尾現(xiàn)象”,即:絕大多數(shù)的數(shù)據(jù)在一個范圍/屬于一個類別,而在另外一個范圍或者另外一個類別中,只有很少的一部分數(shù)據(jù)。那么這個時候直接使用機器學(xué)習(xí)可能效果會不太少,所以這個時候需要我們進行一系列的轉(zhuǎn)換操作。

而在采樣過程中修改樣本的權(quán)重,一般做的比較少。

數(shù)據(jù)不平衡解決方案一

設(shè)置損失函數(shù)的權(quán)重,使得少數(shù)類別數(shù)據(jù)判斷錯誤的損失大于多數(shù)類別數(shù)據(jù)判斷錯誤的損失,即當我們的少數(shù)類別數(shù)據(jù)預(yù)測錯誤的時候,會產(chǎn)生一個比較大的損失值,從而導(dǎo)致模型參數(shù)往讓少數(shù)類別數(shù)據(jù)預(yù)測準確的方向偏。可以通過scikit-learn中的class_weight參數(shù)來設(shè)置權(quán)重。

數(shù)據(jù)不平衡解決方案二

下采樣/欠采樣(under sampling):從多數(shù)類中隨機抽取樣本從而減少多數(shù)類別樣本數(shù)據(jù),使數(shù)據(jù)達到平衡的方式。

PS:比如本來樣本正負例的比例是100:1,一般使用下采樣將數(shù)據(jù)比例控制到4:1就是極限了。如果強行將正負例的比例控制到1:1,會損失很多樣本的特性,使得模型效果還不如100:1的訓(xùn)練結(jié)果。

集成下采樣/欠采樣:采用普通的下采樣方式會導(dǎo)致信息丟失,所以一般采用集成學(xué)習(xí)和下采樣結(jié)合的方式來解決這個問題;主要有兩種方式:

1、EasyEnsemble
采用不放回的數(shù)據(jù)抽取方式抽取多數(shù)類別樣本數(shù)據(jù),然后將抽取出來的數(shù)據(jù)和少數(shù)類別數(shù)據(jù)組合訓(xùn)練一個模型;多次進行這樣的操作,從而構(gòu)建多個模型,然后使用多個模型共同決策/預(yù)測。

2、BalanceCascade
利用Boosting這種增量思想來訓(xùn)練模型;先通過下采樣產(chǎn)生訓(xùn)練集,然后使用Adaboost算法訓(xùn)練一個分類器;然后使用該分類器多對所有的大眾樣本數(shù)據(jù)進行預(yù)測,并將預(yù)測正確的樣本從大眾樣本數(shù)據(jù)中刪除;重復(fù)迭代上述兩個操作,直到大眾樣本數(shù)據(jù)量等于小眾樣本數(shù)據(jù)量。


擴展一個技巧:
如果參加一個比賽,我們會在模型訓(xùn)練的時候?qū)?shù)據(jù)分成訓(xùn)練集開發(fā)集。模型提交后,比賽方會提供測試集對結(jié)果進行預(yù)測。
一般來說我們訓(xùn)練集上的模型評分會在86 ~ 88%左右,開發(fā)集上的評分為82 ~ 84%,但是到了實際的測試集上,模型評分可能只有72%左右。
技巧來了:
1、一般來說測試集的數(shù)據(jù)是不帶標簽的,但是測試集依然有特征X。
2、我們都不考慮訓(xùn)練集和測試集的目標Y,人為創(chuàng)建一列目標值Z,將訓(xùn)練集中的Z都設(shè)為0,將測試集的目標Z都設(shè)為1。
3、尋找測試集的X和Z之間的映射。
4、根據(jù)這個X和Z之間的映射,使用訓(xùn)練集中的X預(yù)測Z,結(jié)果肯定是組0,1向量。
5、將預(yù)測值為1的數(shù)據(jù)提出來,作為我的開發(fā)集(用來驗證我們模型的數(shù)據(jù)集合),剩下預(yù)測為0的數(shù)據(jù)作為訓(xùn)練集。在這個基礎(chǔ)上對我的訓(xùn)練數(shù)據(jù)進行調(diào)優(yōu)。

這是一個在不做任何特征的情況下對模型調(diào)優(yōu)的一個技巧,一般可以將模型在真實環(huán)境中的評分提高一點點。大概72%提高到74%左右。

為什么?實際上我們做訓(xùn)練的目的是為了找一找比賽中人家提供給我們的訓(xùn)練數(shù)據(jù)和真實數(shù)據(jù),哪些長得比較像。將更像真實測試數(shù)據(jù)的樣本放到開發(fā)集中作為調(diào)參的標準,從而能夠提高最終的評分。雖然沒有什么科學(xué)依據(jù),但是確實比較有效,不登大雅之堂。


數(shù)據(jù)不平衡解決方案三

Edited Nearest Neighbor(ENN): 對于多數(shù)類別樣本數(shù)據(jù)而言,如果這個樣本的大部分k近鄰樣本都和自身類別不一樣,那我們就將其刪除,然后使用刪除后的數(shù)據(jù)訓(xùn)練模型。

數(shù)據(jù)不平衡解決方案四

Repeated Edited Nearest Neighbor(RENN): 對于多數(shù)類別樣本數(shù)據(jù)而言,如果這個樣本的大部分k近鄰樣本都和自身類別不一樣,那我們就將其刪除重復(fù)性的進行上述的刪除操作,直到數(shù)據(jù)集無法再被刪除后,使用此時的數(shù)據(jù)集據(jù)訓(xùn)練模型。

數(shù)據(jù)不平衡解決方案五

Tomek Link Removal: 如果兩個不同類別的樣本,它們的最近鄰都是對方,也就是A的最近鄰是B,B的最近鄰也是A,那么A、B就是Tomek Link。將所有Tomek Link中多數(shù)類別的樣本刪除。然后使用刪除后的樣本來訓(xùn)練模型。

\color{red}{以上是對多數(shù)類別的樣本進行刪除}


\color{red}{下面是對少數(shù)類別的樣本進行擴充}

數(shù)據(jù)不平衡解決方案六

過采樣/上采樣(Over Sampling):和欠采樣采用同樣的原理,通過抽樣來增加少數(shù)樣本的數(shù)目,從而達到數(shù)據(jù)平衡的目的。一種簡單的方式就是通過有放回抽樣,不斷的從少數(shù)類別樣本數(shù)據(jù)中抽取樣本,然后使用抽取樣本+原始數(shù)據(jù)組成訓(xùn)練數(shù)據(jù)集來訓(xùn)練模型;不過該方式比較容易導(dǎo)致過擬合一般抽樣樣本不要超過50%。

過采樣/上采樣(Over Sampling):因為在上采樣過程中,是進行是隨機有放回的抽樣,所以最終模型中,數(shù)據(jù)其實是相當于存在一定的重復(fù)數(shù)據(jù),為了防止這個重復(fù)數(shù)據(jù)導(dǎo)致的問題,我們可以加入一定的隨機性,也就是說:在抽取數(shù)據(jù)后,對數(shù)據(jù)的各個維度可以進行隨機的小范圍變動,eg: (1,2,3) --> (1.01, 1.99, 3);通過該方式可以相對比較容易的降低上采樣導(dǎo)致的過擬合問題。

數(shù)據(jù)不平衡解決方案七

采用數(shù)據(jù)合成的方式生成更多的樣本,該方式在小數(shù)據(jù)集場景下具有比較成功的案例。常見算法是SMOTE算法,該算法利用小眾樣本在特征空間的相似性來生成新樣本。

比如:給少數(shù)樣本編號,1~100;將1、2樣本連起來,取他們的中點(期望),作為一個新的樣本。以此類推,最后可以新生成50個樣本。用這種算法一次可以提高50%的樣本量。

數(shù)據(jù)不平衡解決方案八

對于正負樣本極不平衡的情況下,其實可以換一種思路/角度來看待這個問題:可以將其看成一分類(One Class Learning)或者異常檢測(Novelty Detection)問題,在這類算法應(yīng)用中主要就是對于其中一個類別進行建模,然后對所有不屬于這個類別特征的數(shù)據(jù)就認為是異常數(shù)據(jù),經(jīng)典算法包括:One Class SVM、IsolationForest等。

03 特征工程 - 特征轉(zhuǎn)換 - 分詞、Jieba分詞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容