數(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ù)在一個范圍/屬于一個類別康铭,而在另外一個范圍或者另外一個類別中,只有很少的一部分?jǐn)?shù)據(jù)赌髓。那么這個時候直接使用機器學(xué)習(xí)可能效果會不太少从藤,所以這個時候需要我們進行一系列的轉(zhuǎn)換操作。
而在采樣過程中修改樣本的權(quán)重锁蠕,一般做的比較少夷野。
數(shù)據(jù)不平衡解決方案一
設(shè)置損失函數(shù)的權(quán)重,使得少數(shù)類別數(shù)據(jù)判斷錯誤的損失大于多數(shù)類別數(shù)據(jù)判斷錯誤的損失匿沛,即當(dāng)我們的少數(shù)類別數(shù)據(jù)預(yù)測錯誤的時候扫责,會產(chǎn)生一個比較大的損失值,從而導(dǎo)致模型參數(shù)往讓少數(shù)類別數(shù)據(jù)預(yù)測準(zhǔn)確的方向偏逃呼”罟拢可以通過scikit-learn中的class_weight參數(shù)來設(shè)置權(quán)重。
數(shù)據(jù)不平衡解決方案二
下采樣/欠采樣(under sampling):從多數(shù)類中隨機抽取樣本從而減少多數(shù)類別樣本數(shù)據(jù)抡笼,使數(shù)據(jù)達到平衡的方式苏揣。
PS:比如本來樣本正負(fù)例的比例是100:1,一般使用下采樣將數(shù)據(jù)比例控制到4:1就是極限了推姻。如果強行將正負(fù)例的比例控制到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ù)是不帶標(biāo)簽的揖盘,但是測試集依然有特征X。
2锌奴、我們都不考慮訓(xùn)練集和測試集的目標(biāo)Y兽狭,人為創(chuàng)建一列目標(biāo)值Z,將訓(xùn)練集中的Z都設(shè)為0鹿蜀,將測試集的目標(biāo)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)參的標(biāo)準(zhǔn)幼衰,從而能夠提高最終的評分。雖然沒有什么科學(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)練模型。
數(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ù)其實是相當(dāng)于存在一定的重復(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ù)不平衡解決方案八
對于正負(fù)樣本極不平衡的情況下,其實可以換一種思路/角度來看待這個問題:可以將其看成一分類(One Class Learning)或者異常檢測(Novelty Detection)問題茵肃,在這類算法應(yīng)用中主要就是對于其中一個類別進行建模腔长,然后對所有不屬于這個類別特征的數(shù)據(jù)就認(rèn)為是異常數(shù)據(jù),經(jīng)典算法包括:One Class SVM验残、IsolationForest等捞附。