| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 类别不平衡笔记1:上采样 -> 正文阅读 |
|
[人工智能]类别不平衡笔记1:上采样 |
类别不平衡imblance problem 查找一些资料 样本不均讨论: https://blog.csdn.net/sp_programmer/article/details/48047101 上采样、下采样、代价敏感 代价敏感:设计objective function的时候给不同misclassification的情况不同的relative weights。也就是说给从小数量的样本被分成大数量的样本更大的penalty 正样本样本绝对数很小。需要扩散正样本方法 Synthetic Minority Over-sampling Technique 我试过这个方法,解决部分问题,主要还是需要增加样本在特征空间的覆盖! 工程上光靠算法也解决不了问题,有的还是需要加入下经验知识来做 1,比例是一个关键的参数,据我们的经验,1:14是一个常见的“好”比例。[哈哈] 2,stratified sampling,也就是根据特征来采样,尽量使样本都覆盖特征空间。3,训练的时候,这个正负样本的“出场”顺序也很关键,不然可能还没遇到正(负)样 本模型就已经收敛了。 伪标注方法support cluster machine: 聚类然后从负样本中找和正样本比较紧邻的作为正样本 如果1:10算是均匀的话,可以将多数类分割成为1000份。然后将每一份跟少数类的样本组合进行训练得到分类器。而后将这1000个分类器用assemble的方法组合位一个分类器。记得读到的论文可行,但没有验证过 类别不平衡问题,可以参考Haibo, H. and E. A. Garcia (2009). "Learning from Imbalanced Data." Knowledge and Data Engineering, IEEE Transactions on" 的survey.已有很多方法提出 Transductive SVM (TSVM) 用当前训练的模型标注新的sample imbalance-problem http://www.chioka.in/class- imbalance-problem / 单类分类算法 如svdd参考positive only learning等半监督学习中如早期的spy算法等来构造合适的负例来解决正负例不平衡的问题。在只有正例的学习问题中,负例千差万别,且数量也远超正例 最经典的imbalanced的方法,cascade learning,详见viola的face detection paper. 知乎方法归纳 https://www.zhihu.com/question/264220817/answer/1889196091 常见3类方法参考HyperGBM知乎讲解: https://zhuanlan.zhihu.com/p/350052055 GitHub文档: https://github.com/DataCanvasIO/HyperGBM 通常应对不均衡问题主要有三类方法: Class Weight(类别权重) Resampling/Oversampling (重采样) Undersampling (降采样) 一、类别权重Class Weight Class Weight方法通过为计算各分类的样本占比来重新分配不同分类的样本权重,使得样本更少的分类样本在训练时获得更高的权重来改善少数类的有效学习。 二、重采样Resampling/Oversampling 包括随机采样、SMOTE、ADASYN 1.RandomOversampling(随机重采样) 有放回地在少数类别中重复采样,直到样本均衡为止。 缺点: 人为减少数据集的方差。 2.SMOTE(Synthetic Minority Over-sampling Technique) 对少数类别, 通过原始样本的插值来生成新样本 3.ADASYN(Adaptive Synthetic) 采样同SMOTE,但是,为给定xi生成的样本数量与附近样本的数量成正比,而邻近样本的数量与xi不属于同一类别。 因此,ADASYN在生成新的样本时往往只关注异常值。 两种方法区别参考: https://imbalanced-learn.org/stable/over_sampling.html ADASYN在原始样本旁边生成样本,这些样本使用k-最近邻分类器容易被错误地分类,而SMOTE的基本实现不会区分使用最近邻规则进行分类的简单和困难样本 SMOTE 可能会连接靠类内部的值和外侧边缘(inliers and outliers)值,而 ADASYN 可能只关注外侧值,在这两种情况下,这都可能导致决策函数欠优。SMOTE一些变体可以侧重于最优决策函数边界附近的样本,并生成与最近邻类相反方向的样本. (BorderlineSMOTE、 SVMSMOTE和KMeansSMOTE) ill-posed参考: https://blog.csdn.net/Mr_Lowbee/article/details/109738200 ill-posed不存在稳定的唯一解的问题: 需要做各种先验假设,来约束它,使它变为well posed,从而能够求解 三、下采样Undersampling 包括:RandomUndersampling、NearMiss、TomekLinks及EditedNearestNeighbours 1.RandomUndersampling(随机降采样) 随机删除多数类中的样本,直到各分类样本平衡为止。 2.NearMiss 采用KNN方式挑选那些多数类中和少数类区分度最高的样本 3.TomekLinks 当来自不同分类中的样本相互之间距离很近,这个时候, 这些样本很有可能是噪声数据,我们通过删除多数类中的这类样本来实现类平衡。 4.EditedNearestNeighbours 如果多数类中的某些样本和其他类的样本距离更接近,就选择删除这些样本 常见错误数据泄漏(data leakage): 在重采样中,存在一个常见的陷阱: 在将整个数据集拆分为训练和测试分区之前对其进行重采样。 这样的处理会导致两个问题: 1. 通过对整个数据集进行重新采样,训练集和测试集都进行了类别平衡,而模型应该在自然不平衡的数据集上进行测试,以评估模型的潜在偏差; 2. 重采样过程可能会使用数据集中有关测试样本的信息来生成或选择某些样本。因此,我们可能会使用稍后将用作测试样品的样品信息,这是典型的数据泄漏问题。 HyperGBMhttps://github.com/DataCanvasIO/HyperGBM HyperGBM是一个支持全流水线(full-pipeline)的AutoML库,它完全涵盖了数据清清洗,预处理,特征生成和选择,模型选择和超参数优化的端到端各个阶段。是用于表格(tabular)数据AutoML 工具。 将从数据清理到算法选择的整个过程放在一个搜索空间中进行优化。端到端的流水线优化更像是一个顺序决策过程,因此HyperGBM使用强化学习、蒙特卡洛树搜索、进化算法与元学习相结合 使用的ML算法都是GBM梯度提升树模型,目前包括XGBoost,LightGBM和Catboost 基于框架Hypernets: https://github.com/DataCanvasIO/Hypernets 其中不平衡数据文档: https://hypergbm.readthedocs.io/zh_CN/latest/example_imbalance.html imbalanced-learn处理样本不平衡的包imbalanced-learn: https://github.com/scikit-learn-contrib/imbalanced-learn 为scikit-learn兼容项目 (查了一下, 根据视频中pip 团队成员自己对PyPI 和pip的发音, 分别为"pie pea eye"和[p?p]) 对应期刊论文: Imbalanced-learn: A Python Toolbox to Tackle the Curse of Imbalanced Datasets in Machine Learning (2017CCFa) http://jmlr.org/papers/v18/16-365 文档: https://imbalanced-learn.org/stable/ 推荐使用流水线(pipeline), 可以避免数据泄露
公开数据集参考: https://imbalanced-learn.org/stable/datasets/index.html 基于真实数据集的预测示例: https://imbalanced-learn.org/stable/auto_examples/index.html#general-examples 各个采样方法中, 参数sampling_strategy的作用: https://imbalanced-learn.org/stable/auto_examples/api/plot_sampling_strategy_usage.htm 该参数是浮点数时, 定义采样前后目标类别的样本数的比率 sampling_strategy可以作为字符串给出,该字符串指定重采样所针对的类。使用欠采样和过度采样时,采样数量将被均衡(the number of samples will be equalized)。 字典键值对形式时: 键对应于目标类, 值对应于每个目标类所需的样本数 过采样示例: https://imbalanced-learn.org/stable/auto_examples/over-sampling/plot_comparison_over_sampling.html 过采样demo安装imbalanced-learn包, 参考官网安装指南: https://imbalanced-learn.org/stable/install.html#getting-started 激活虚拟环境
Pip安装
完整示例代码:
随机过采样使用类RandomOverSampler, 随机过度采样可用于重复某些样本,平衡数据集之间的样本数
其中RandomOverSampler函数: 通过bootstrap方法采样. 参数sampling_strategy默认值'auto'= 'not majority':对除多数类以外的所有类重新采样; 例子:
SMOTE对少数类别, 通过原始样本的插值来生成新样本 例子:
ADASYNAdaptive Synthetic 重视容易分错的样本
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 2:48:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |