作者 | 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')

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=0stop_no_topup=recs_no_topuplist_df=[]for fold in range(0,folds):fold_n=df_no_topup.iloc[start_no_topup:stop_no_topup,:]start_no_topup=stop_no_topupstop_no_topup=start_no_topup+recs_no_topupdf=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,加入微信群请扫码:

【机器学习】平衡你的数据集的几项技巧相关推荐

  1. python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

    #2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...

  2. 8种适用于不同机器学习问题的常用数据集

    要找到一定特定的数据集可以解决各种机器学习问题,是一件很难的事情.越来越多企业或研究机构将自己的数据集公开,已经成为全球的趋势,这也将有助于大家进行更多研究. 近期,亚马逊高级技术顾问 Will Ba ...

  3. 机器学习笔记:常用数据集之scikit-learn在线下载开源数据集

    目录 1. 前言 2. 来自真实世界的开源数据集 3. 函数接口 4. 使用代码示例 例1 kddcup99数据集 例2 20类新闻分类数据集 例3 带标签的人脸数据集 1. 前言 机器学习算法是以数 ...

  4. 机器学习笔记:常用数据集之scikit-learn内置玩具数据集

    目录 1. 前言 2. Scikit-learn内置数据集 3. 数据加载示例 例1:鸢尾花数据集 例2:糖尿病数据集 例3:手写数字数据集 1. 前言 机器学习算法是以数据为粮食的,所以机器学习开发 ...

  5. 机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)

    机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)

  6. 机器学习、推荐系统常用数据集

    机器学习.推荐系统有关数据集 在学习中整理了机器学习.推荐系统的一些数据集,希望可以对你有所帮助. 1.UCI 这是加州大学信息与计算机科学学院的一个数据库,包含了100多个数据集. 根据机器学习问题 ...

  7. 机器学习中的L1和L2正则化项

    关注微信公众号[Microstrong],我写过四年Android代码,了解前端.熟悉后台,现在研究方向是机器学习.深度学习!一起来学习,一起来进步,一起来交流吧! 本文同步更新在我的微信公众号里,地 ...

  8. 应用在机器学习中的聚类数据集产生方法

    简 介: 本文根据 机器学习中常用的聚类数据集生成方法 中的内容进行编辑实验和整理而得.并在之后对于聚类数据库生成进行不断的补充. 关键词: 机器学习,聚类算法,数据集合 §01 直接生成   这类方 ...

  9. 【机器学习】从电影数据集到推荐系统

    作者 | Amine Zaamoun 编译 | VK 来源 | Towards Data Science 最初是一个数据集,现在是一个由Amine Zaamoun开发的电影推荐系统: 为什么是推荐系统 ...

最新文章

  1. 5G 时代的 Android App 开发入门与项目实战
  2. tcp retransmission原因
  3. Java基础题笔记2
  4. Hadoop Exception in createBlockOutputStream
  5. linux 上如何测速
  6. 怎样才能安全使用计算机和手机,手机如何与电脑共享文件
  7. HCIA-Big Data华为认证大数据工程师在线课程笔记
  8. 【卷积神经网络】卷积神经网络(Convolutional Neural Networks, CNN)基础
  9. mac怎么查node版本_Mac更新node版本和npm版本
  10. 如何解决百度网盘下载速度慢的问题
  11. 学习pandas df[]
  12. Spring cloud 多版本控制及灰度发布
  13. Flutter 2.2 现已发布!
  14. 沪杭行——君子之交淡如水
  15. Vivado无法识别开发板解决办法
  16. Android文件类型转换(已适用于Android11)
  17. java课程设计培训班_Java课程设计
  18. 苏宁杀入“菜场”,不断丰富智慧零售消费场景
  19. 神经网络体系搭建(五)
  20. 用定积分计算位移与距离示例:

热门文章

  1. Ajax请求Session超时的解决办法:拦截器 + 封装jquery的post方法
  2. STC89C52RC内部EEPROM编程
  3. C#语音朗读文本 — TTS的实现
  4. WCF面向服务应用程序系列之一:Hello WCF
  5. quartz数据库方式与web工程整合
  6. C#3.0扩展方法[转]
  7. 移动端H5页面注意事项
  8. 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组
  9. monkeyrunner自动登录脚本
  10. Entity Framework 5.0基础系列