2020年12月31日 星期四

data imbalance-資料不均勻問題與處理方式

markdown 問題
許多實際應用中,資料不均勻是常見的 如:工廠中的OK/NG的樣本數比例、醫學影像中罕見疾病的發生機率 使用不均勻資料進行機器學習,所產生的結果會造成偏差 例如:[信用卡詐騙分析](https://www.kaggle.com/mlg-ulb/creditcardfraud)的資料集中,no fraud與fraud佔的百分比為99.83%、0.17% ![](https://i.imgur.com/HF2qj57.png) 由於資料的數量偏向某一類別,在資料沒有處理的情況下會造成overfitting 分類模型將假定在大多數情況下沒有詐騙,而實際的模型是希望能找出少數的詐騙事件 解決方法 * 收集更多數據 * 設定訓練時的 class weights 調整訓練時的類別權重,讓類別資料數較少的影像有較高的權重 EX:當資料數量為100:2:50, 權重可設定為 $\dfrac{100}{100} : \dfrac{100}{2} : \dfrac{100}{50} = 1 : 50 : 2$ ```=python # 設定訓練權重 class_weight = {0: 1., 1: 50., 2: 2.} model.fit(X_train, Y_train, nb_epoch=5, batch_size=32, class_weight=class_weight) ``` * Oversampling * Random oversampling 隨機重複採樣相同資料填充數據集 * Data Generator 影像中的過採樣 對現有影像旋轉、位移、調整亮度、縮放產生更多數據集
參考[keras ImageDataGenerator](https://keras.io/api/preprocessing/image/) * SMOTE(Synthetic Minority Oversampling Technique)
基於已存在的資料,隨機抽取一個點,並與他的鄰居資料點(k-nearest neighbors)產生一個新的合成資料 * Undersampling * Random undersampling 從各類別中隨機抽取樣本 * Cluster
各群內進行clustering(K-Means),刪除遠離各群群心的資料點 Note:採樣流程要在切分訓練、測試集之後,才能讓測試集保持純度 所得到的測試結果才有鑑別度 參考 [训练集样本不平衡问题对CNN的影响](https://zhuanlan.zhihu.com/p/23444244) [smote-enn-解決數據不平衡建模的採樣方法](https://medium.com/%E6%95%B8%E5%AD%B8-%E4%BA%BA%E5%B7%A5%E6%99%BA%E6%85%A7%E8%88%87%E8%9F%92%E8%9B%87/smote-enn-%E8%A7%A3%E6%B1%BA%E6%95%B8%E6%93%9A%E4%B8%8D%E5%B9%B3%E8%A1%A1%E5%BB%BA%E6%A8%A1%E7%9A%84%E6%8E%A1%E6%A8%A3%E6%96%B9%E6%B3%95-cdb6324b711e)

沒有留言:

張貼留言

AOI產業職涯規畫相關文章