非平衡数据处理-SMOTE Tomek算法(互联网最全)

作者Toby,来源公众号:Python风控模型,非平衡数据处理-SMOTE Tomek算法

之前Toby老师讲了非平衡数据处理相关知识,具体内容和链接如下。

imbalanced data机器学习非平衡数据处理

Python非平衡数据处理_SMOTE-ENN 方法

非平衡数据处理ADASYN-基于自适应性的过采样方法

非平衡数据处理SMOTE的改良算法-borderline SMOTE, ADASYN

非平衡数据处理-Tomek link算法


今天介绍的是SMOTE Tomek算法,介绍前我们先了解一下具体背景。
 

概述

非平衡数据在金融风控领域、反欺诈客户识别、广告智能推荐和生物医疗中普遍存在。一般而言,不平衡数据正负样本的比例差异极大,如在Kaggle竞赛中的桑坦德银行交易预测和IEEE-CIS欺诈检测数据。对模型而言,不均衡数据构建的模型会更愿意偏向于多类别样本的标签。非平衡数据情况下,模型的准确率指标accuracy不具有太大参考价值,模型实际应用价值降低。如下图所示,为在不均衡数据下模型预测的概率分布。

图片

历史背景

20 世纪 90 年代末,当时南佛罗里达大学的研究生 Niesh V Chawla(SMOTE 背后的主要大脑)正在研究二元分类问题。他正在处理乳房 X 光检查图像,他的任务是构建一个分类器,该分类器将像素作为输入,并将其分类为正常像素或癌变像素。当他达到 97% 的分类准确率时,他非常高兴。当他看到 97.6% 的像素都是正常的时,他的快乐是短暂的。

您可能会想,问题出在哪里?有两个问题

  • 假设在 100 个像素的样本中,98 个像素是正常的,2 个是癌变的,如果我们编写一个程序,它可以预测任何情况都是正常的。分类准确率是多少?高达98%。程序学会了吗?一点也不。

  • 还有一个问题。分类器努力在训练数据中获得良好的性能,并且随着正常观察的增多,它们将更多地专注于学习“正常”类的模式。这就像任何学生知道 98% 的问题来自代数而 2% 来自三角学时会做的那样。他们会安全地忽略三角函数

那么,为什么会出现这个问题,是因为类别的频率或数量之间存在很大的差异。我们称这样的数据集为表现类别不平衡的数据集。正常类称为多数类,稀有类称为少数类。

图片

白色海鸥作为少数群体

这在现实生活中的应用中存在吗?以垃圾邮件检测、假新闻检测、欺诈检测、可疑活动检测、入侵检测等为例,类别不平衡问题就表现出来了。

带来一些平衡的解决方案:

基本方法称为重采样技术。有两种基本方法。

欠采样:-

图片

对多数类进行欠采样或下采样

我们从多数类中随机抽取样本,并使其等于少数类的数量。这称为多数类的欠采样或下采样。

问题:忽略或放弃如此多的原始数据并不是一个好主意。

过采样:

图片

对少数类进行过采样或上采样

在这里,对少数类应用放回抽样,以创建与多数类中一样多的观测值,并且两个类是平衡的。这称为少数类的过采样或上采样。

问题:重复相同的少数类数据会导致过度拟合。

SMOTE-过采样算法

图片

有多种方法可用于对典型分类问题中使用的数据集进行过采样(使用分类算法对一组图像进行分类,给定一组带标签的训练图像)。最常见的技术被称为 SMOTE:合成少数过采样技术。[4]为了说明这种技术是如何工作的,考虑一些训练数据,其中有s 个样本,以及数据特征空间中的f 个特征。请注意,为简单起见,这些特征是连续的。例如,考虑用于分类的鸟类数据集。我们想要对其进行过采样的少数类的特征空间可以是喙长、翼展和重量(都是连续的)。为了过采样,从数据集中取一个样本,并考虑它的k 个最近邻(在特征空间中)。要创建合成数据点,请获取这k 个邻居之一与当前数据点之间的向量。将此向量乘以介于 0 和 1 之间的随机数x。将其添加到当前数据点以创建新的合成数据点。

如果看不懂smote术语解释没关系,我用可视化图解smote原理。

如下图,红色数据是minority class,即占比较小的数据集,一共只有4个。

绿色数据是majority class,即占比较大的数据集,一共13个。

为了训练模型时解决非平衡数据问题,我们使用smote方法。

图片

我们通过向量方法链接四个红色点,新的数据(创造的伪数据)就会出现在红色点链接的线上。

图片

大家看,新创造的8个点出现在红色点链接的线上。这样红色数据集就有12个,蓝色数据集有13个,基本是5:5平衡了。

图片

通过上述smote方法,我们解决了非平衡数据问题。

Tomek's link-欠采样方法

Tomek's link是一种用于处理类不平衡数据集的欠采样方法,通过移除近邻的反例样本来改善模型的性能。这种方法可以有效地解决类别不平衡问题,提高分类器的准确性。


Tomek Links是一种欠采样技术,由Ivan Tomek于1976年开发。它是从Condensed Nearest Neighbors (CNN)中修改而来的一种技术。它可以用于找到与少数类数据具有最低欧几里得距离的多数类数据的所需样本,然后将其删除。

图片

Tomek's link支持多分类器模型。下面是英文原释义:


Tomek's link supports multi-class resampling. A one-vs.-rest scheme is used as originally proposed in.

Tomek'slink的参数如下,具体参考链接:https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.TomekLinks.html

图片

图片



SMOTETomek

当SMOTE和Tomek link结合使用时,可用于进一步改善机器学习模型在不平衡数据集上的性能,通过对少数类进行过采样并同时清理数据集。这种组合技术被称为SMOTETomek。原英文释义如下:

SMOTE (Synthetic Minority Over-sampling Technique) is a popular algorithm used in machine learning for dealing with imbalanced datasets. It works by generating synthetic samples from the minority class to balance out the distribution of classes in the dataset.

Tomek links are pairs of instances that are close to each other but belong to different classes. The Tomek links removal technique is used to clean up the dataset by removing these pairs of instances, making the decision boundary between classes clearer.

When combined, SMOTE and Tomek links can be used to further improve the performance of a machine learning model on imbalanced datasets by oversampling the minority class and cleaning up the dataset at the same time. This combined technique is known as SMOTETomek.SMOTE(Synthetic Minority Over-sampling Technique)

SMOTETomek具体算法是通过对少数类别(异常)进行过采样和对多数类别(正常)进行欠采样的组合,可以比仅对多数类别进行欠采样的方法获得更好的分类器性能。这种方法最早由Batista等人在2003年提出。

SMOTE-Tomek Links的过程如下:

1.开始SMOTE:从少数类别中随机选择数据。
2.计算随机数据与其k个最近邻之间的距离。
3.将差值乘以0到1之间的随机数,然后将结果添加到少数类别中作为合成样本。
4.重复步骤2-3,直到满足所需的少数类别比例(结束SMOTE)。
5.开始Tomek Links:从多数类别中随机选择数据。
6.如果随机数据的最近邻是来自少数类别的数据(即创建Tomek Link),则移除Tomek Link。



Python关于SMOTETomek代码参数如下:

图片

图片

图片

lendingclub实验SMOTETomek VS TomekLinks VS SMOTE

Toby老师用12万大样本的lendingclub数据集来实验SMOTETomek算法,观察是否真的能够提升模型性能。Toby老师实验了三种算法对比SMOTETomek VS TomekLinks VS SMOTE

下图是部分lendingclub数据展示

图片

TomekLinks VS SMOTETomek
通过对比发现TomekLinks和SMOTETomek在不同指标上各有优势。如何选择非平衡算法,取决于你的模型竞赛或业务方对具体哪个指标关注。
如下图SMOTETomek的AUC,f1分数,sensitivity等指标高于TomekLinks。
TomekLinks的accuracy和precision高于SMOTETomek。

图片


SMOTE VS TomekLinks VS SMOTETomek
通过对比发现SMOTE,TomekLinks和SMOTETomek在不同指标上各有优势。
SMOTE的AUC值最高。
TomekLinks的accuracy和precision值最高。
SMOTETomek的AUC,f1分数值最高。

图片

未经过非平衡数据处理 VS SMOTE VS TomekLinks VS SMOTETomek

图片

最后对比未经过非平衡数据处理,SMOTE,TomekLinks和SMOTETomek建模后模型性能。我们发现未经过非平衡数据处理模型的f1分数和accuracy值最高。
SMOTE的AUC值最高。
TomekLinks的precision值最高。
综合来看SMOTE,TomekLinks和SMOTETomek三种算法通过牺牲f1分数来提升模型的区分能力AUC。
提醒:上述实验结果仅限于lendingclub部分实验数据,不具有普遍性结论。在不同数据集上测试,可能得到不同实验结论。


SMOTEENN VS SMOTETomek
SMOTEENN和SMOTETomek经常作实验对比。我们还可以在下面的例子中看到,SMOTEENN比SMOTETomek清除更多的噪音样本。

'''
商务咨询QQ:231469242
python金融风控评分卡模型和数据分析(加强版)
https://study.163.com/series/1202915601.htm?share=2&shareId=400000000398149
'''
from collections import Counter
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=5000, n_features=2, n_informative=2,
                           n_redundant=0, n_repeated=0, n_classes=3,
                           n_clusters_per_class=1,
                           weights=[0.01, 0.05, 0.94],
                           class_sep=0.8, random_state=0)
print(sorted(Counter(y).items()))
from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=0)
X_resampled, y_resampled = smote_enn.fit_resample(X, y)
print(sorted(Counter(y_resampled).items()))
from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=0)
X_resampled, y_resampled = smote_tomek.fit_resample(X, y)
print(sorted(Counter(y_resampled).items()))



下图是通过生成三种类比随机点


from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_context("poster")
X, y = make_classification(
    n_samples=100,
    n_features=2,
    n_informative=2,
    n_redundant=0,
    n_repeated=0,
    n_classes=3,
    n_clusters_per_class=1,
    weights=[0.1, 0.2, 0.7],
    class_sep=0.8,
    random_state=0,
)
_, ax = plt.subplots(figsize=(6, 6))
_ = ax.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8, edgecolor="k")

图片

在上图基础上,然后对比SMOTE,SMOTEENN,SMOTETomek非平衡数据处理效过,可视化如下图。

SMOTE Tomek 就介绍到这里,如果大家喜欢就收藏,点赞,转发文章。欢迎各位同学报名<python金融风控评分卡模型和数据分析微专业课>,我们提供专业评分卡模型,集成树模型,风控业务等知识,实现自动化信用评分功能,打造金融风控信贷审批模型,降低风险。

我们公司有供应链金融机器学习模型定制服务(针对企业建模和论文科研),提供公司正规发票。如果你需要建模项目定制服务,商务联系作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件&#xff1a;VMware 17 Linux&#xff1a;rocky8_9 主机&#xff1a;Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息&#xff08;以笔记本电脑以WiFi联网为例&#x…

【Canvas与艺术】录王昌龄出塞诗“秦时明月汉时关”

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘制秦时明月汉时关</title><style type&q…

【论文阅读】Sparse is Enough in Scaling Transformers

Sparse is Enough in Scaling Transformers 论文地址摘要1 介绍2 相关工作模型压缩。模型修剪模型蒸馏。稀疏注意力。张量分解。稀疏前馈。 3 Sparse is Enough3.1 稀疏前馈层3.2 稀疏 QKV 层3.3 稀疏损失层。 4 长序列的稀疏性4.1 长序列架构4.2 内存效率的可逆性4.3 泛化的循…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C++校招八股

c类的访问权限与继承方式 公有成员在任何地方都可以被访问&#xff0c;包括类的外部和派生类。受保护成员在类的内部和派生类中可以被访问&#xff0c;但在类的外部不可访问。 私有成员只能在类的内部访问&#xff0c;包括类的成员函数和友元函数&#xff0c;不允许在类的外部…

MySQL45讲(一)(45)

如果使用的是unsigned int 做的主键&#xff0c;如果你用完了&#xff0c;在insert直接就是报冲突的错误 碰到这种情况&#xff0c;只能进行修改字段的属性了&#xff0c;把他换成big unsigned 了&#xff0c;所以建表对字段定义的时候就需要判断好&#xff0c;是否会超过 对于…

我的创作纪念日—128天的坚持|分享|成长

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10&#xff0c;Vlan20&#xff0c;Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk&#xff0c;并放行相关 VLAN按照图示分区域配置 MSTP&#xff0c;并配置主备根网桥 实验步骤 VLAN基础配置&#xff08;…

RateLimiter 限流 —— 通过切面对单个用户进行限流和黑名单处理

关于登录的安全性管理有较多的手段&#xff0c;包括&#xff1b;设备信息、IP信息、绑定的信息、验证码登各类方式。不过在一些网页版的登录中&#xff0c;如果有人想办法把你的验证码给我&#xff0c;我就可以登录你的账户&#xff0c;查看你的数据。对于一些不法分子通过让你…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类&#xff0c;接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather&#xff0c;这个也翻译为散点/收集&#xff0c;是指指示设备能够读取或写入内存中的任何区域&#xff0c;而不仅仅是特定…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起&#xff0c;酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现&#xff0c;介绍其关键特点和最佳实践&#xff0c;助力商旅行业迈向智能化未来。 1. **需求分析与场景设计&#xff1a;*…

【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境

我的服务器配置是2GB CPU 2GB 内存 Ubuntu22.04 目录 一、阿里云 ubuntu 22.04.1安装docker 二、docker基础命令 三、Windows电脑访问云服务器 四、安装java环境 安装OpenJDK 8&#xff08;可以根据需要安装其他版本的JDK&#xff09; 安装java的依赖管理工具maven 一、…

基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [448,448]; imgPath test/; % 图像…

LeetCode 15 —— 三数之和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先我们对数组进行从小到大排序&#xff0c;然后遍历数组 [ 0 , n u m s . s i z e ( ) − 3 ] [0,nums.size()-3] [0,nums.size()−3] 作为三元组中的 a a a&#xff0c;由于三元组的索引互不相同&#xff0c…

文件与IO基础常识知识

在这里&#xff0c;只介绍理论知识&#xff0c;不介绍代码。 目录 1.IO 1.1.字面概念 1.2.输入输出模型 2.文件 2.1.文件目录 2.2.文件路径 2.3.文件分类 1.IO 为了我们接下来学习的文件IO&#xff0c;所以我们先来认识什么是IO。 1.1.字面概念 &#xff08;1&#x…

【知识加油站】——机电产品数字孪生机理模型构建

明确一种多领域、多层次、参数化、一致性的机电一体化装备数字孪生机理模型构建准则&#xff01; 关键词英文简称&#xff1a; 数字孪生&#xff1a;DT物联网&#xff1a;IoT网络物理系统&#xff1a;CPS高级架构&#xff1a;HLA统一建模语言&#xff1a;UML数控机床&#xf…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址&#xff1a;A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net&#xff1a;一种用于讽刺检测的新型深度神经网络 &#x1f4c5…

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标 方法二 搜索cmd 打开命令行面板 然后输入 explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}就能显示出来了 ## 方法三 通知区域图标不存在 如图&#xff0c;显示为这样 这种时候桌面…

深入解析Java中的String对象及其性能优化

作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤️觉得文章还…
最新文章