目录

失衡的程度

分层抽样

分层抽样示例

上采样

下采样


失衡的程度

不平衡数据即类别之间的分布不均匀

一般多少比例为严重不平衡, 参考:

数据比例达到多少才是不平衡数据? - 知乎

根据少数类占比, 可对类别不平衡情况进行划分

轻度:20-40%

中度:1-20%

极度:<1%

分层抽样

分层比例/定额抽样原理, 参考:

按比例分层抽样和定额抽样的区别? - 知乎

(比例)分层抽样是概率抽样的一种,是指先分层再按总体群种中各层的比例随机抽样。定额抽样是非概率抽样的一种,是指分层并事先设定各层的主观配额比例,再进行抽样。举例:调查某高中学生的作息状况,该校高中1000人,高一350人,高二330人,高三320人。比例分层抽样:抽样100,高一35人,高二33人,高三32人。定额抽样(主观因素:调查者可能认为高三作息问题更严重,因此将更多配额事先给了高三):抽样100,高一30人,高二30人,高三40人。

定额抽样缺点是有偏差, 但此处不是为了估计发病比例, 而是为了根据特征训练模型, 所以应该没有影响.

分层抽样也有非比例分层抽样, 参考:

分层抽样的非比例抽样是不是属于概率抽样,为什么? - 知乎

分层抽奖分为等比例抽样和不等比例抽样;

不等比例抽样即非比例抽样,是说从某一层抽取样本的比例要大于其他层。但是每层内部被抽到的概率仍然是均等的,随机的。

并且分层抽样属于概率抽样。大类都属于了,下面的分支自然也属于。

找了些代码, 都只有通用的均衡分层抽样, 不等比例的也许可以利用数据集分割函数手动分割. (最后仔细看一下官方文档)

分层抽样示例

各种抽样方法的示例

基于 Python 的 8 种常用抽样方法_Python数据之道的博客-CSDN博客

如何实现分层抽样, 参考:

怎么用python分层抽样? - 知乎

scikit-learn这个库里面有很多抽样工具sklearn.model_selection里面的KFold就是一个分层抽样工具,但是不保证每层中不同标签的比例与总体保持一致,用sklearn.model_selection中的StratifiedKFold抽样就可以保持标签比例一致。

代码示例:

python四种抽样方法的使用:随机抽样、聚类抽样、系统抽样、分层抽样_呆萌的代Ma的博客-CSDN博客_python分层随机抽样

医疗数据应用, 参考:

https://www.cnblogs.com/cgmcoding/p/13588581.html

sklearn.model_selection.StratifiedShuffleSplit 主要用于数据不均匀的时候,比如在医疗数据当中得癌症的人比不得癌症的人少很多,此交叉验证对象是StratifiedKFold和ShuffleSplit的合并,返回分层的随机折叠。折叠是通过保留每个类别的样品百分比来进行的

sklearn.model_selection.StratifiedShuffleSplit(n_splits=10, *, test_size=None, train_size=None, random_state=None)

参数用法的K折交叉法基本一样,都是通过构建StratifiedShuffleSplit对象,然后再通过for循环和split函数进行拆分,返回的是对应的索引

官网文档参考:

https://scikit-learn.org/stable/modules/cross_validation.html#stratified-shuffle-split

StratifiedGroupKFold是一个交叉验证方案,结合了StramentedKFold和GroupKFold。这个想法是尝试在每次拆分中保留类的分布,同时将每个组保持在单个拆分中。当您的数据集不平衡时,这可能很有用,因此仅使用 GroupKFold 可能会产生不平衡的拆分

定额抽样data.sample

13、python对数据进行随机抽样、按比例、分层抽样_UP Lee的博客-CSDN博客_python 分层抽样

上采样

随机上采样

使用类RandomOverSampler, 随机过度采样可用于重复某些样本,平衡数据集之间的样本数

from imblearn.over_sampling import RandomOverSampler

ros = RandomOverSampler(random_state=0)

X_resampled, y_resampled = ros.fit_resample(X, y)

from collections import Counter

print(sorted(Counter(y_resampled).items()))

[(0, 4674), (1, 4674), (2, 4674)]

from sklearn.svm import LinearSVC

clf = LinearSVC()

clf.fit(X_resampled, y_resampled) # doctest : +ELLIPSIS

sampler = RandomOverSampler(random_state=0)

# model = make_pipeline(sampler, svm1).fit(train_data, train_data_lable)

X_res, y_res = sampler.fit_resample(train_data, train_data_lable)

print('Original dataset shape %s' % Counter(train_data_lable))

print('Resampled dataset shape %s' % Counter(y_res))

svm1.fit(X_res, y_res)

其中RandomOverSampler函数:

通过bootstrap方法采样.

参数sampling_strategy默认值'auto'= 'not majority':对除多数类以外的所有类重新采样;

插值采样:

from sklearn.datasets import fetch_openml

df_adult, y_adult = fetch_openml(

'adult', version=2, as_frame=True, return_X_y=True)

df_adult.head()

df_resampled, y_resampled = ros.fit_resample(df_adult, y_adult)

df_resampled.head()

下采样

参考官方文档

3. Under-sampling — Version 0.9.1

原型生成技术将减少目标类中的样本数量,但剩余的样本是从原始集合中生成而不是选择的。

与原型生成算法相反,原型选择算法将从原始集合S中选择样本。

RandomUnderSampler是一种快速简便的方法来平衡数据,方法是为目标类随机选择数据子集:

from imblearn.under_sampling import RandomUnderSampler

rus = RandomUnderSampler(random_state=0)

X_resampled, y_resampled = rus.fit_resample(X, y)

print(sorted(Counter(y_resampled).items()))

[(0, 64), (1, 64), (2, 64)]

数据处理笔记11 类别不平衡处理-抽样方法相关推荐

  1. 解决类别不平衡问题的方法综述

    一.数据不平衡 1.1 什么是数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的.当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果.因为实际数据往往 ...

  2. 类别不平衡Class-imbalance解决方法

    类别不平衡是指分类任务中不同类别的训练样例数目差别很大的情况. 1.扩大数据集 2.欠采样 欠采样(under-sampling):对大类的数据样本进行采样来减少该类数据样本的个数,使其与其他类数目接 ...

  3. 分类中常见的类别不平衡问题解决方法

    常见的类别不平衡问题解决方法 常见的类别不平衡问题解决方法 那么,什么是"类别不平衡"? 解决方法 1.扩大数据集 2.欠采样 3.过采样 4.使用新评价指标 5.尝试不同的分类算 ...

  4. Github|类别不平衡学习资源(下)

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 139 篇文章,本文大约 3600 字,阅读大约需要 10 分钟 继续 ...

  5. 类别不平衡问题之评估指标

    源自博客 https://zhuanlan.zhihu.com/p/34473430 https://zhuanlan.zhihu.com/p/34655990 以下是我的一些摘抄笔记 由于类别不平衡 ...

  6. 标签稀疏类别不平衡问题解决方案总结

    知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53https://www.zhihu.com/people/shuang-shou-cha- ...

  7. 机器学习笔记-多分类学习,类别不平衡,决策树

    读书笔记 多分类学习 基本思想:拆解法:将多分类任务拆解为若干个二分类任务求解,先对这些问题经拆分,为拆分出的每个二分类任务训练一个分类器,测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果 ...

  8. 如何解决NLP分类任务的11个关键问题:类别不平衡低耗时计算小样本鲁棒性测试检验长文本分类 JayLou娄杰

    原文链接:https://zhuanlan.zhihu.com/p/183852900 欢迎关注<高能AI>公众号- 声明:文中观点谨代表笔者个人立场,盲目搬运有风险- 在2020这个时间 ...

  9. 4种改善类别不平衡的方法

    一些数据集包含类不平衡,并且在某些类中有比其他类多得多的实例.如果训练集中的不平衡没有反映在实际的数据流中,就会导致机器学习分类的平均精度较差. 在这篇文章中,我将描述数据准备和模型准备中几种技术的组 ...

最新文章

  1. 第十二周项目一-实现复数类中的运算符重载(1)
  2. Spring Cloud【Finchley】-18 Zuul过滤器
  3. C++ Tricks
  4. 3D Game Programming with directx 11 习题答案 8.3
  5. redis-稿件-python连接redis-使用连接池的方式来创建
  6. 华为鸿蒙将比安卓快,任正非透露华为鸿蒙系统:将比安卓速度快60%
  7. 被逮到一个初始状态考虑不周的Bug
  8. HDU 3065 病毒侵袭持续中(AC自动机)题解
  9. python re span_Python的re模块与正则表达式小结
  10. java 链表 插入_Java链表中添加元素的原理与实现方法详解
  11. Dagger2简单使用
  12. js弹出框 确定 取消
  13. 扫描仪产品国家抽检实施细则及信息技术类产品检测设备
  14. 压缩[SCOI2007]
  15. Qt 中使用 VLC-Qt 播放网络视频流(附实例)
  16. Tomcat 启动时报 java.net.BindException: Address already in use[localhost:8005]
  17. 达梦dm8可视化工具_活字格兼容达梦DM8,低代码支持数据库国产化
  18. 飞鸽传书绿色版XEIM指出
  19. java上位机通信协议实现
  20. 【Python】九、文件操作

热门文章

  1. ajax请求时拒绝访问,ajax跨域请求js拒绝访问的解决方法
  2. 嵌套查询和连接查询(SQL SERVER 2008)
  3. 【学习随记】自由空间阻抗匹配
  4. 【NOI2005】 月下柠檬树
  5. python里不能调用random库_Python标准库教程—random模块
  6. 计算机网络隧道工程,隧道工程
  7. python pymssql - pymssql模块官方文档的翻译
  8. module xxx missing dependencies
  9. C++控制输出的字体颜色
  10. 暴力破解无线密码最详细教程