分類機器學習中,某一標籤佔比太大(標籤稀疏),如何學習?

2021-02-20 深度學習與計算機視覺

連結:https://www.zhihu.com/question/372186043

編輯:深度學習與計算機視覺

聲明:僅做學術分享,侵刪

假設10000個數據,有100個1,200個2,其餘全是0,這種數據如何建模,普通模型會傾向所有數據都標註成0。

batch抽樣學習,每次從數據中抽樣,比如每次抽32個數據訓練,16個0,8個1,8個2,丟到模型裡面訓練,這麼做可以嗎?

作者:予以初始

https://www.zhihu.com/question/372186043/answer/1393735908

1.問題定義這是典型的數據類型不平衡問題。比如對於一個二分類任務,訓練集中類別為0的負樣本佔樣本總數的90%,而正樣本只佔10%。那麼這樣的訓練集有什麼弊端呢?如果類別不平衡的樣本直接丟給模型學習,那麼很顯然模型會在負樣本上的學習效果更好,因為模型『看到』的負樣本更多。舉個慄子,就像你如果花9天時間去學習數學,花一天時間去學習語文,不出意外你會在數學考試中表現更好。做過視頻或者廣告點擊預估比賽的小夥伴應該經常遇到這種問題,這類比賽的訓練集一般都是非常不平衡的,正樣本的比例通常不足10%。這裡我總結了一些在比賽中用過的一些行之有效的處理方法,下面為大家逐一介紹。Tips:是不是類別平衡的訓練集就一定更好呢?這個不能保證,但對於大多數情況,類別平衡的數據對模型來說是更友好的,至少模型不會傾向於數量多的那一類別。2.解決方法

2.1 採樣

這是解決數據類別不平衡的最簡單、最暴力的方法。

如果負樣本太多,那就對負樣本進行欠採樣,就是隨機的從負樣本中抽取一部分樣本,然後與正樣本合併成訓練集丟給模型訓練。這樣有個很明顯的弊端,就是會造成嚴重的信息損失,數據收集不易,你還要丟棄一部分,很顯然不合理。如果正樣本太少,那就對正樣本進行過採樣,就是對正樣本進行複製,或者如果是NLP、CV任務,可以做一些數據增強,以此來增加正樣本的數量。但是對於一般的任務來說,簡單的對正樣本進行複製,以此來達到增加正樣本數量的目的,這樣會使模型在這正樣本上過擬合,因為模型『看到』太多次這樣的樣本。就像你如果複習同一道題太多次,答案都背住了,所以看到類似的題就直接寫答案,不會變通顯然是不對的。所以採樣的方法不是解決類別不平衡問題的權宜之計,慎用

上面介紹了對正樣本進行過採樣,會使模型過擬合的問題,SMOTE也是基於採樣的方法,但是SMOTE可以降低過擬合的風險。

過採樣是直接對樣本進行複製,導致訓練集重複樣本太多,而SMOTE則不是直接複製,而是生成與正樣本相似並且訓練集中沒有的樣本。具體做法:首先隨機選取一個正樣本,然後用K近鄰選取一個與其最相似的樣本,取兩樣本的中值或者均值,作為新樣本。這樣生成的樣本可一定程度降低模型過擬合的風險 (仍然可能過擬合) 。Tips:如果你對K近鄰有些陌生,可以參考我的這篇文章做個簡單的回顧。https://zhuanlan.zhihu.com/p/160800727

2.3 閾值調整

調整閾值也是比較簡單而且有效的方法,這也是我在做比賽時經常會用到的方法。

對於二分類任務來說,一般會以0.5作為閾值來劃分正負樣本(比如邏輯回歸),預測概率值大於0.5則判定為正樣本,反之為負樣本。對於類別不平衡的訓練集來說,這個閾值就不再合適了,因為當使用負樣本來更新模型權重時,權重的更新會使模型的輸出儘量偏向於0,如果負樣本太多,那麼負樣本對於模型權重的更新量就比較多,使得模型輸出接近0的概率就比較大,所以可以根據正負樣本所佔的比例來調整閾值。比如正樣本只佔10%,則可以將閾值調整為0.1,輸出概率大於0.1的則判定為正樣本,這樣可以很好的解決類別不平衡問題,調整閾值是個簡單且高效的方法。感謝評論區饅頭對解決方法的補充:可以在計算每個樣本的loss時,通過為正樣本增加權重的方式,來優化樣本不平衡問題。該方法原理跟劃分閾值類似,正樣本對權重的更新會使模型輸出儘可能偏向於1,但是正樣本太少,所以一方面可以降低劃分為正樣本的閾值,另一方面則可以在計算loss時,增加正樣本權重,從而增大正樣本對模型參數的更新量,提高模型輸出為1的概率。模型融合不僅可以提升預測的準確性,其實也可以解決類別不平衡問題。比如對於正樣本(10%)、負樣本(90%)的訓練集,可以將負樣本均等拆分為9份(注意一定要同分布拆分),然後每一份都與正樣本組合成為一個小訓練集,得到9份類別平衡的數據。然後用9個模型分別去訓練(可以使用有差異性的模型, 使預測精度更高),然後可以對9個模型的預測結果加權累加,作為最終的輸出。最優的權重通常難以抉擇,可以使用一個LR將9個模型的輸出作為輸入,通過訓練讓模型自己學習每個模型對應的權重即可。通過模型融合就可以保證每個模型的訓練數據都是類別平衡的數據,並且還能提升預測的準確性,一舉兩得。Tips:做一個小小的總結,方法一簡單粗暴,方法二複雜、收益低,方法三和四是我最常用到的兩種,簡單且高效。當你遇到類別不平衡的數據時,可以參照以上幾種方法進行嘗試,至於哪種方法更有效還得通過實踐來證明。作者:莫名
https://www.zhihu.com/question/372186043/answer/1043490391
1.構造數據集。比如用半監督或度量學習做篩選/輔助標籤,大概率會比簡單的按數量比例要好一些。2.設計loss /loss weight,注意 細粒度,優化內容其它方案比如數據合成,GAN生成新樣本,我們做過實驗,沒有明顯提高,或者和強數據增強的效果差不多,但是成本就很高啦;多模型在工業項目是不划算的/沒有產品競爭力的,單模型都得各種修剪。當然這有個前提,哪怕是一個很小的任務,數據總量都得在百萬級。否則,您要試驗的方法可多得去了,而且並不能超過數據量上升帶來的收益。
作者:蘇冠旭https://www.zhihu.com/question/372186043/answer/1140392823針對樣本不均衡問題,我專門做過試驗。一句話概括:隨機森林、GBDT等集成學習方法能夠顯著提高F1,而上抽樣、下抽樣、SMOTE等方法,在集成學習面前基本沒用。作者:打鐵燒磚
https://www.zhihu.com/question/372186043/answer/1502141503
這是一個經常會在各類明星公司的AI,機器學習以及數據面試中出現的問題。很多答主都談了一些比較新的方法。而最基本的三種方法可以歸納如下(面試的一個比較基本的答案):1.欠採樣(under-sampling),去除一些反例。2.過採樣,up-samplinh增加一些正例。比如data augmentation等方法。很多答主提到的SMOTE就是這種方法的典型代表。3.第三種方法叫閾值移動(threshold-moving),不動原始數據集,對預測值進行一些調整,也就是對算法本身進行一些改動。這方面也有不少的一些算法。比如有改版的SVM以及ensemble learning。在現在的其他一些研究領域比如AI的公平性研究(比如避免在銀行貸款算法中出現根據膚色來決定是否貸款的情況),類似的改動算法本身的參數的思想也有很大應用。作者:Ming
https://www.zhihu.com/question/372186043/answer/1182965574
面試DS的職位的時候,被面試官問道。回答了上採樣下採樣之後,面試官追問,沒有回答的很好(掩面)。然後面試官的回答是,在業內裡面,假如遇到了這種太稀疏的情況,可以構建一個白噪聲的分布,比如說 ,然後加上原數據構建新的數據來讓整體的數據變得平衡。或者用別的標準來看模型的好壞,比如說F1-Score。
作者:Yiiiiiii
https://www.zhihu.com/question/372186043/answer/1149397361
個人覺得,高維不平衡數據集,就機器學習方法來說,ensemble+集成學習是個不錯的方案。還有現成的庫可以用。我在跑一個不平衡數據集的時候,用的是imblearn的balancedbaggingclassifier(),和balancedRandomforest()效果相當好。對於一個分布不明的數據集,建議不要過採樣。而ensemble方法可以保證欠採樣也不丟失信息。作者:Xiecheng
https://www.zhihu.com/question/372186043/answer/1056969532
如果是binary問題,需不需要做再平衡,取決於兩點,1.你的建模或者實驗目的;2.你的檢驗結果。不同的模型,對於非平衡標籤的容忍度是不一樣的。多做幾輪實驗,看下under sampling, over sampling 或者smote這類擬合仿真數據的方法下,檢驗結果的好壞,這個沒有統一的標準。重抽樣不是必須的。如果是multiclass的問題,我會建議必須做再平衡。因為這類問題通常需要模型回答正確分到哪個類。不做平衡容易導致結果傾斜到一個類上。Binary有一些不同。除了回答正確分類之外,也會經常用輸出的概率解決排序問題。作者:adam86546853
https://www.zhihu.com/question/372186043/answer/1152217557
目前工業界的角度來看,保留數據的原始分布是最可靠的,大廠基本都是擬合原始分布,一般不太會去採樣。自己原先也做過相關採樣實驗,會有信息損失,auc在千分點損失在實際線上效果都是可反映的。由於樣本多,所以一般是加大模型複雜度,nn模型增大特徵規模,儘量擬合真實分布。當然也有各種採樣理論以及修正,如果不計較精度,可以權衡準度和樣本規模。
作者:磐石
https://www.zhihu.com/question/372186043/answer/1432241043
樓主的想法實際可以嘗試看看效果。技術層面很多樓主回答很詳細了,我就不在說了。從學習的角度來說,如果比較少的樣本存在這個標籤對應的模式,那麼使用一些學習技術很有意義。如果少量的樣本中無法學習得到這個標籤的模式,那麼意義也不大,因為可能網絡擬合的只是記憶樣本,無法學習到對應的範式,這樣泛化效果也不會好。如果看到這裡,說明你喜歡這篇文章,請轉發、點讚。微信搜索「uncle_pn」,歡迎添加小編微信「 mthler」,每日朋友圈更新一篇高質量博文。

相關焦點

  • 多標籤文本分類模型總結
    XMTC有很廣泛的應用,比如購物網站中對商品進行分類,所有商品種類有上百萬個,任意一種商品可能屬於其中的幾個或者幾十個,當用戶創建一個新商品時,網站需要根據商品的屬性預測其多個分類,以方便搜索使用。和傳統決策樹不同,此方法在創建樹形結構模型的時候,會根據所有特徵(features)學習一個權重參數,由此參數決定樹結構創建過程的每個節點的分支劃分,目的是要使各個分支有相似的標籤分布。此方法最有名的模型叫FastXML,其節點劃分時採用的打分方法叫nDCG,當模型建立後需要預測時,尋找葉子節點中分數最高的top n節點就是預測的標籤。
  • 多標籤學習的新趨勢(2020 Survey)
    關於單標籤學習和多標籤學習的區別,這裡簡單給個例子:傳統的圖片單標籤分類考慮識別一張圖片裡的一個物體,例如 ImageNet、CIFAR10 等都是如此,但其實圖片裡往往不會只有一個物體,大家隨手往自己的桌面拍一張照片,就會有多個物體,比如手機、電腦、筆、書籍等等。
  • 標籤分布學習
    為了更好地表示一個樣本的分布的情況,訓練一個學習樣本的標籤分布(Label Distribution)的模型,被稱為標籤分布學習(Label Distribution Learning,LDL),讓每一個維度都反映對應標籤程度的一種概率分布。
  • 機器學習用到SSD裡面!
    三、機器學習的類型機器學習主要有三種基本類型:監督學習、非監督學習和強化學習。1監督學習監督學習是使用已知正確答案的示例來訓練模型。已知數據和其一一對應的標籤,訓練一個智能算法,將輸入數據映射到標籤的過程,它的常見應用場景如分類問題和回歸問題。
  • 如何用 Python 和 BERT 做多標籤(multi-label)文本分類?
    10餘行代碼,藉助 BERT 輕鬆完成多標籤(multi-label)文本分類任務。疑問之前我寫了《如何用 Python 和 BERT 做中文文本二元分類?》一文,為你講解過如何用 BERT 語言模型和遷移學習進行文本分類。不少讀者留言詢問:王老師,難道 BERT 只能支持二元分類嗎?
  • 圖像分類 | 深度學習PK傳統機器學習
    圖像分類的傳統方法是特徵描述及檢測,這類傳統方法可能對於一些簡單的圖像分類是有效的,但由於實際情況非常複雜,傳統的分類方法不堪重負。現在,我們不再試圖用代碼來描述每一個圖像類別,決定轉而使用機器學習的方法處理圖像分類問題。目前,許多研究者使用CNN等深度學習模型進行圖像分類;另外,經典的KNN和SVM算法也取得不錯的結果。
  • 吳恩達《機器學習訓練秘籍》:7 條關於項目實踐的實用建議
    》(Machine Learning Yearning)是吳恩達的新作,主要講的是如何應用機器學習算法以及如何構建機器學習項目。目前他正在編寫《機器學習訓練秘籍》(http://www.mlyearning.org/)這本書,教讀者如何組織機器學習項目。吳恩達在書中寫道:這本書主要是教你如何應用機器學習算法,而不是教你機器學習算法本身。一些AI技術課程會教你算法,而這本書旨在教你如何使用算法這個利器。
  • LCM:緩解標籤不獨立+噪聲標籤問題
    文本分類普遍存在一個問題深度學習模型進行文本分類有一個共性:首先使用一個比較深的模型去做text representation;然後使用一個簡單的分類層(比如全連接)去預測標籤分布;之後計算預測標籤分布和真實one-hot標籤向量的交叉熵。
  • 什麼是機器學習?看完就明白了
    機器學習概念機器學習就是對計算機一部分數據進行學習,然後對另外一些數據進行預測與判斷。機器學習的核心是「使用算法解析數據,從中學習,然後對新數據做出決定或預測」。也就是說計算機利用以獲取的數據得出某一模型,然後利用此模型進行預測的一種方法,這個過程跟人的學習過程有些類似,比如人獲取一定的經驗,可以對新問題進行預測。
  • 基於PredictionIO的推薦引擎打造,及大規模多標籤分類探索
    而本期Meetup上,白剛的分享主要圍繞著新浪門戶的大規模多標籤分類算法工作(項目已上傳到GitHub )。背景在類似新浪的媒體中,廣告帶來收益,同時也會影響到用戶體驗。為了減少對用戶體驗的影響(甚至是對用戶體驗產生幫助),如何區分「用戶屬於哪個人群,是哪些廣告的潛在受眾」至關重要,也就是如何做好user profiling。
  • 機器會給你的照片打「壞人」標籤?國外網紅項目聚焦 AI 偏見
    近日,麻省理工的博士生在兩項獨立研究中發現,雖然機器擅長識別人工智慧生成的文本,但是很難分辨其中的真假。原因在於訓練機器識別假新聞的資料庫中充滿了人類的偏見,因此,訓練而成的人工智慧也不可避免地帶上了刻板印象。人類偏見是人工智慧界普遍存在的沉痾。
  • 什麼是機器學習?為什麼它如此重要?
    什麼是機器學習?機器學習是一種數據分析方法,它可以自動分析模型的建築。通過使用迭代學習數據的算法,機器學習可以使電腦在沒有被明確編程看哪裡的情況下,發現隱藏的領域。迭代在機器學習中是非常重要的,由於它的存在,模型在遇到新的數據時,就可以獨立地適應數據。它們可以從先前產生的可靠計算,重複的決定和結果中進行學習。
  • 乾貨來襲,谷歌最新機器學習術語表(上)
    以下術語表中列出了一般的機器學習術語和 TensorFlow 專用術語的定義。本文為 A-L (術語首字母)部分,M-W 部分參見乾貨來襲,谷歌最新機器學習術語表(下)。在二元分類中,準確率的定義如下:
  • 分類問題-----多標籤(multilabel)、多類別(multiclass)
    單標籤分類         在傳統的單標籤分類中,訓練集中的每一個樣本只有一個相關的標籤 l ,這個標籤來自於一個不重合的標籤集合L,|L| > 1.當|L|=2 時,這就是一個二分類問題,或文本和網頁數據的過濾(filtering)問題。當|L| > 2 時是多分類問題。
  • 在Data Collector中如何使用TensorFlow實現實時機器學習
    憑藉著機器學習(Machine Learning,ML)技術,數據分析師和科學家們可以利用各種歷史數據,在離線或實時的狀態下,使用TensorFlow等技術,協助做出更好的數據驅動類業務決策。在本文中,您將學習到:如何使用StreamSets Data Collector 3.5.0和StreamSets Data Collector Edge最新發布的TensorFlow Evaluator,將TensorFlow(TF)模型用於各種預測和分類。在深入討論細節之前,我們先一起理清幾個基本概念。
  • word標籤功能:如何快速製作批量產品貼紙標籤
    在日常辦公中,在辦公用品或倉庫物料上,同樣也能看到貼紙標籤,用於物品的分類,以達到標識的效果。貼紙標籤效果:因此,作為一名辦公人員,許多時候我們都需要製作一些標籤貼紙。那麼,如何才能快速且大批量的製作貼紙標籤呢?
  • 「標籤效應」可以用來做什麼
    接著又為區分年齡大小,因此有兒童、少年,青年,中年、老年……到後來,標籤成為一種評價。學習優品德好的是「三好學生」,反之就是差生。聽家長老師指揮的就是「乖孩子」,頑皮搗蛋的又是「壞孩子」。如今,標籤又發展到被用於人群劃分歸類,如「剁手黨」、「廣場舞大媽」、「暖男」等等。與此同時,標籤開始發揮其定性導向的作用,影響著人的行為習慣。
  • Web前端學習第九課,使用文本格式化標籤
    1.如何給元素添加樣式?通過前面的學習大家知道,在web前端中,元素所顯示出來樣子稱為表現,專業處理元素長什麼樣子的技術主要是CSS(層疊樣式表)。不過在HTML語言中,你可以用以下兩種方式先進行簡單處理。
  • 周志華團隊:深度森林挑戰多標籤學習,9大數據集超越傳統方法
    這篇論文展示了如何構建深度森林(deep forest),為在許多任務中使用深度神經網絡之外的方法打開了一扇門」。 最近,周志華教授團隊再次拓展了深度森林的應用範圍,將深度森林方法用於多標籤學習(multi-label learning)。
  • 實戰|利用機器學習解決一個多分類任務
    ↑ "小詹學Python"一個值得星標的公眾號                              本文約3000字,閱讀大概需要10分鐘對於機器學習而言專業程度雖然不及Kaggle,但練習賽中十個簡單項目用來練手還是不錯的,種類也是非常全的,包括分類、回歸預測、自然語言處理、圖像識別等等,本文在練習賽【8】——地震後建築修復建議的基礎上實現。了解數據集首先一定要做的是了解數據集,因為大多數據集的特徵名都是以英文或者以英文簡寫搭配命名,只有真正了解一個特徵的意義,才能更好地分析該特徵與標籤變量之前存在的關係。