【机器学习】平衡你的数据集的几项技巧
作者 | Praveen Thenraj
編譯 | VK
來源 | Towards Data Science
“如果你被問題的規模所壓倒,把它分解成更小的部分……”
機器學習中的類不平衡是一個重要的問題,也是處理數據集時最受關注的問題之一。類不平衡的數據集往往更具欺騙性,如果處理不當,結果可能導致錯誤的決策。
最近我碰巧在一個數據集中工作,它有一個類不平衡的問題。我不太喜歡數據生成技術,并且由于不平衡的嚴重性,我不想使用像分層K-fold這樣的技術,所以我使用了另一種技術,它幫助模型比傳統技術更好地學習數據。
也許我有點晚使用這個技術,但我想在這里分享它。
import?pandas?as?pdtrain=pd.read_csv('/Desktop/Files/train_data.csv') print(train['Top-up?Month'].value_counts())No?Top-up?Service????106677>?48?Months???????????8366 36-48?Months???????????3656 24-30?Months???????????3492 30-36?Months???????????3062 18-24?Months???????????2368 12-18?Months???????????1034 Name:?Top-up?Month,?dtype:?int64以上是訓練數據中因變量的值計數。從上面可以清楚地看到,“No Top-up Service”類和其他類之間存在嚴重的類不平衡。
方法
所以我在這里采用的方法是將大多數類數據分成大小為“n”的小折。每個數據塊(折)都有與大多數類相關的“k”個數據點。所有其他次要類數據點都聚集在一起('m')
上面的代碼片段將主要類數據劃分為多個折,每個折包含相同數量的數據點。然后大多數類數據的第一個折(在上面的代碼中被引用為fold_n)與次要類(df_topup)的所有數據連接在一起。
以上在一個循環中發生,循環將繼續,直到等于折“n”的大小??梢钥吹?#xff0c;每次,大多數類數據的一個新塊與次要類的完整數據連接,從而允許模型在訓練階段在比例相同的數據下進行訓練。
Major?class?initially?-?106677 Fold?size(n)?-?5 Major?class?data(k)?per?fold=106677/5?-?21335 Minor?class(all?minor?classes?combined)?-?21978 Total?data?per?fold(major+minor)?-?43313下面代碼片段中的代碼也可以驗證這一點。
list_data=chunks(df_train_main,5) list_data_shape=[df.shape?for?df?in?list_data] print(list_data_shape)[(43313,?6),?(43313,?6),?(43313,?6),?(43313,?6),?(43313,?6)]現在可以看到,一個具有嚴重類不平衡問題的大數據集被劃分為5個小數據集
不過,以下是我從上述方法中認識到的兩個問題:
添加到每個折中的大多數類數據的分布。因為我們只是將整個大類數據劃分為折(n),折的分布與原有分布不同。
不過,在所有需要解決的問題中,類(12-18個月)和主要類(“No Top-up Service”)之間仍然存在不平衡。但對于二類,這種方法效果更好。
這些折的數據然后被傳遞到一個模型,以訓練模型使用更少的不平衡數據。這是一種通用的方法,不僅可以應用于結構化數據,還可以應用于圖像等非結構化數據。
我個人在一個Kaggle競賽中應用了同樣的方法進行圖像分類,并獲得了更好的準確度。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【机器学习】平衡你的数据集的几项技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙系统桌面小艺建议怎么删除?鸿蒙系统小
- 下一篇: 【深度学习】收藏|神经网络调试Check