作者 | Praveen Thenraj
编译 | VK
来源 | Towards Data Science
“如果你被问题的规模所压倒,把它分解成更小的部分……”
机器学习中的类不平衡是一个重要的问题,也是处理数据集时最受关注的问题之一。类不平衡的数据集往往更具欺骗性,如果处理不当,结果可能导致错误的决策。
最近我碰巧在一个数据集中工作,它有一个类不平衡的问题。我不太喜欢数据生成技术,并且由于不平衡的严重性,我不想使用像分层K-fold这样的技术,所以我使用了另一种技术,它帮助模型比传统技术更好地学习数据。
也许我有点晚使用这个技术,但我想在这里分享它。
import pandas as pd
train=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')
def chunks(df,folds):
df_no_topup=df.loc[df['Top-up Month']==0]
df_topup=df.loc[df['Top-up Month']==1]
recs_no_topup=int(df.loc[df['Top-up Month']==0].shape[0]/folds)
start_no_topup=0
stop_no_topup=recs_no_topup
list_df=[]
for fold in range(0,folds):
fold_n=df_no_topup.iloc[start_no_topup:stop_no_topup,:]
start_no_topup=stop_no_topup
stop_no_topup=start_no_topup+recs_no_topup
df=pd.concat([fold_n,df_topup],axis=0)
list_df.append(df)
return list_df
上面的代码片段将主要类数据划分为多个折,每个折包含相同数量的数据点。然后大多数类数据的第一个折(在上面的代码中被引用为fold_n)与次要类(df_topup)的所有数据连接在一起。
以上在一个循环中发生,循环将继续,直到等于折“n”的大小。可以看到,每次,大多数类数据的一个新块与次要类的完整数据连接,从而允许模型在训练阶段在比例相同的数据下进行训练。
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,加入微信群请扫码: