首頁>Club>
目前給一個數據集進行建模,實驗目標:根據使用者的本地機器故障的發生資料來預測使用者是否會投訴。實驗資料:使用者機器故障資料:使用者本地機器故障資料每十秒鐘上傳到中心伺服器進行儲存使用者投訴資料:雖然看了不少資料,但是還是一頭霧水,希望各位大神介紹一下自己在處理這種非均衡資料集的時候所使用的方法,望不吝賜教謝謝!
11
回覆列表
  • 1 # 你看我獨角獸嗎

    非常感謝邀請。我先解釋下什麼是不平衡資料?簡單來說就是待分類的資料分佈很不平衡,例如10w條需要分是否喜歡運動的資料集中,只有200條是喜歡運動,而且特徵很不明顯,需要大量喜歡運動和不喜歡運動的資料才能區分出來。這時候就屬於資料不平衡的範疇了。

    資料不平衡的問題

    1.少數類所包含的資訊就會很有限,從而難以確定少數類資料的分佈,即在其內部難以發現規律,進而造成少數類的識別率低;

    2.資料碎片。很多分類演算法採用分治法,樣本空間的逐漸劃分會導致資料碎片問題,這樣只能在各個獨立的子空間中尋找資料的規律,對於少數類來說每個子空間中包含了很少的資料資訊,一些跨空間的資料規律就不能被挖掘出來;

    3.不恰當的歸納偏置。許多歸納推理系統在存在不確定時往往傾向於把樣本分類為多數類。

    可解決方法

    1.過抽樣(Oversampling)

    2.欠抽樣(Undersampling)

    3.資料合成

    4.加權

    5.一分類

    過抽樣

    透過改變訓練資料的分佈來消除或減小資料的不平衡,最簡單的辦法就是隨機複製少數類樣本,缺點是可能導致過擬合,沒有給少數類增加任何新的資訊。改進的過抽樣方法透過在少數類中加入隨機高斯噪聲或產生新的合成樣本等方法。

    欠抽樣

    透過減少多數類樣本來提高少數類的分類效能,最簡單的方法是透過隨機地去掉一些多數類樣本來減小多數類的規模,缺點是會丟失多數類的一些重要資訊,會縮小資料集的資訊量,降低模型對資料集的學習。

    資料合成

    資料合成方法是利用已有樣本生成更多樣本,這類方法在小資料集很常見,而且效果還不錯,比較常用的是SMOTE演算法。SMOTE全稱是Synthetic Minority Oversampling Technique,即合成少數類過取樣技術。它是基於隨機過取樣演算法的一種改進方案,由於隨機過取樣很容易發生過擬合,所以SMOTE演算法的基本思想是對少數類樣本進行分析並根據少數類樣本人工合成新樣本新增到資料集中,具體演算法內容可以到下次寫文章的時候詳細講述。

    加權

    加權實際上是一種人為設定判錯懲罰項的方法,即對不同類別分錯的代價不同來使得分類器更傾向分對少數類別。舉個簡單的例子就是當你這一次迭代分錯少數類時會受到大的懲罰,當下一次迭代時會對這個樣本分到少數類的機率增加,保證分對類別。

    一分類

    對於正負樣本極不平衡的場景,我們可以換一個完全不同的角度來看待問題:把它看做一分類(One ClassLearning)或異常檢測(Novelty Detection)問題。這類方法的重點不在於捕捉類間的差別,而是為其中一類進行建模,經典的工作包括One-class SVM等。

    如何選擇

    根據網上博主們的經驗和自己工作的經驗,總結如下:

    1.在資料極為不平衡的情況下,建議使用一分類來做處理;

    2.在正負樣本都比較少的情況下,資料合成的效果比較好;

    3.在資料集足夠數量和正負樣本一般不平衡的情況下,建議採取抽樣和加權的方式處理。在不考慮計算機資源情況下,如果資料量比較少,那麼並行進行下采樣方式效果較好,如果資料集較大且一般不平衡情況,也使用過取樣進行處理。

  • 2 # AiMath

    不平衡資料在機器學習中大量存在,如垃圾郵件比正常郵件少得多,裝置故障資料比正常執行資料少得多,電費欠費資料比正常繳費資料少得多。在分類機器學習中,如果不對不平衡資料進行有效處理,全部或簡單抽樣就訓練分類器,那麼會得到有偏結果,即分類器偏向於樣本多的類,分類器會粗糙地將樣本歸為樣本多的類,得到無意義的分類結果。下面給出一個我經常使用的不平衡資料處理演算法。該演算法叫級聯演算法,本質上是根據一定的標準不斷拋棄樣本多的類的資料,最後使得正反類的樣本差不多。為了通俗易懂,假設標註為0的資料(0資料)有500條,標註為1的資料(1資料)有5000條。這是典型的不平衡資料集。級聯演算法的通俗步驟如下:

    第一級:在1資料中隨機選500條資料,和0資料組成了1000條訓練資料。隨意選擇一個單一分類器,如決策樹、邏輯迴歸、支援向量機等,當然該分類器對1資料分類越準確越好,為什麼呢?原因是能加快級聯演算法收斂。另外為什麼選擇單一分類器,原因是一個單一分類器就能區分出來1資料,就說明該1資料的特徵特別明顯,容易和0資料區分出來。然後用上面選擇好的1000條資料訓練該單一分類器,用訓練好的分類器對全部1資料進行分類,假設1資料分類準確率為60%,拋棄分類正確的1資料,保留分類錯誤的1資料,即保留了2000條資料,可以看出經過演算法第一級,1資料由5000條減到2000條。

    第二級:重新在餘下的2000條1資料中隨機挑選500條資料,和0資料重新組成1000條訓練資料。重複上述樣本拋棄過程,假設分類器對1資料的分類準確率為50%,即拋棄一半的1資料,最終1資料餘下1000條。

    第n級:不斷重複上述過程,直到正反類資料差不多。

    該演算法高明之處就是不斷拋棄容易分類的資料,留下的都是難啃的骨頭。可以設想,對最後餘下的資料重新訓練一個提升分類器或組合分類器,那麼最後的分類器對拋棄樣本的分類不在話下,因為拋棄的樣本的特徵最明顯,對最難啃的骨頭,它們和0資料是平衡的,分類器就可以更加關注0資料了,往往我們更加感興趣的是0資料的識別。

    最後,推薦一篇參考論文:周志華等,一種基於級聯模型的類別不平衡資料分類方法[J].南京大學學報:自然科學版,2006,42(2):148-155.

  • 中秋節和大豐收的關聯?
  • 如何在Python中用scikit-learn生成測試資料集?