机器学习之SMOTE重采样--解决样本标签不均匀问题

一、SMOTE原理

通常在处理分类问题中数据不平衡类别。使用SMOTE算法对其中的少数类别进行过采样,以使其与多数类别的样本数量相当或更接近。SMOTE的全称是Synthetic Minority Over-Sampling Technique 即“人工少数类过采样法”,非直接对少数类进行重采样,而是设计算法来人工合成一些新的少数样本。



二、使用

1.安装库

python提供了就是一个处理不均衡数据的imblearn库;其基于机器学习常用sklearn开发而成,使用方法和sklearn库十分相似,上手非常容易。imblearn库对不平衡数据的主要处理方法主要分为如下四种:

  1. 欠采样
  2. 过采样
  3. 联合采样
  4. 集成采样

包含了各种常用的不平衡数据处理方法,例如:随机过采样,SMOTE及其变形方法,tom-links欠采样,编辑最近邻欠采样方法等等。

pip3 install imbalanced-learn



2. 使用

安装完之后就可以从imblearn 导出SMOTE算法了:

from imblearn.over_sampling import SMOTE

sm =  SMOTE(
sampling_strategy = ‘auto’,
random_state = None, ## 随机器设定
k_neighbors = 5, ## 用相近的 5 个样本(中的一个)生成正样本
m_neighbors = 10, ## 当使用 kind={'borderline1', 'borderline2', 'svm'}
out_step =0.5, ## 当使用 kind = 'svm'
kind = 'regular', ## 随机选取少数类的样本
– borderline1: 最近邻中的随机样本b与该少数类样本a来自于不同的类
– borderline2: 随机样本b可以是属于任何一个类的样本;
– svm:使用支持向量机分类器产生支持向量然后再生成新的少数类样本
svm_estimator = SVC(), ## svm 分类器的选取
n_jobs = 1, ## 使用的例程数,为-1时使用全部CPU
ratio=None
)

仅用正样本的K近邻生成新正样本是正是SMOTE方法,考虑到(SMOTE的最终目的是分清正负样本的边界),所以需要对样本生成进行优化



3. 优化

SMOTE优化bordeline1方法

Dgr = [] # 危险集
for i in 正样本:
      1) 计算点 i 在训练集 D 上的 m 个最近邻。
         x =  i 的最近邻中属于负样本的数量
      2) 如果 x  = m,则 p 是一个噪声
          next
      3) 如果 0 ≤ x ≤ m/2, 则说明p很安全
          next
      4) 如果 m/2 ≤ x ≤ m, 那么点p就很危险了,我们需要在这个点附近生成一些新的少数类点
         Dgr.append(x)
最后,对于每个在危险集(Dgr)中的点,使用SMOTE算法生成新的样本

SMOTE优化 borderline2 方法简述

前面1-4步骤均同 borderline1 方法
在最后进行SMOTE的时候:
采用了 比例分配 生成新样本
for i in Dgr:
    1) 正样本 K 个近邻
    2) 负样本 K 个近邻
    3) 正样本 K 个近邻选取 alpha 比例的样本点 
    	和 i 作随机的线性插值 ==>> 新正样本点
    4) 负样本K个近邻选取 (1 - alpha) 比例的样本点 
    	和 i 作随机的线性插值 ==>> 新正样本点




三、例子

Original dataset shape Counter({1: 900, 0: 100})
Resampled dataset shape Counter({0: 900, 1: 900})

from imblearn.over_sampling import SMOTE
from sklearn.datasets import make_classification
from collections import Counter
import matplotlib.pyplot as plt
 
# 创建一个不平衡的数据集
X, y = make_classification(n_classes=2, class_sep=2,
                           weights=[0.1, 0.9], n_informative=3, n_redundant=1,
                           flip_y=0, n_features=20, n_clusters_per_class=1,
                           n_samples=1000, random_state=10)
 
print('Original dataset shape %s' % Counter(y))
 
# 使用SMOTE算法平衡数据集
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
 
print('Resampled dataset shape %s' % Counter(y_resampled))
 
# 可视化原始数据集和平衡后的数据集
plt.figure(figsize=(16, 6))
 
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], c=y, marker='o', cmap='coolwarm', alpha=0.6)
plt.title('Original Dataset')
 
plt.subplot(1, 2, 2)
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled, marker='o', cmap='coolwarm', alpha=0.6)
plt.title('Resampled Dataset')
 
plt.tight_layout()
plt.show()

这个示例中,首先生成一个不平衡的二分类数据集,然后使用SMOTE算法来生成新的合成样本,使得两个类别的样本数量相等。最后原始数据集和平衡后的数据集进行可视化展示。
在这里插入图片描述

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

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

相关文章

.[[MyFile@waifu.club]].svh勒索病毒数据库恢复方案

.[[MyFilewaifu.club]].svh勒索病毒有什么特点? .[[MyFilewaifu.club]].svh是一种最近多发的勒索病毒,它通过加密受害者的文件并要求支付赎金来解锁,从而达到勒索钱财的目的。恢复重要数据请添加技术服务号(safe130)。以下是关于这种病毒的详…

如何压缩word文档的大小?6个方法教你方便的压缩word文档

如何压缩word文档的大小?6个方法教你方便的压缩word文档 以下是六个常用的软件和方法,可以帮助您方便地压缩Word文档大小: 使用Microsoft Word内置功能: 在Microsoft Word中,您可以使用内置的压缩功能来减小文档的大…

导数和偏导数练习

导数题目列表 偏导数题目列表 这里是上述50个导数和偏导数练习题的答案: 导数答案列表 偏导数答案列表 更多问题咨询 Cos机器人

Linux CPU 飙升 排查五步法

排查思路-五步法 1. top命令定位应用进程pid 找到最耗时的CPU的进程pid top2. top-Hp[pid]定位应用进程对应的线程tid 找到最消耗CPU的线程ID // 执行 top -Hp [pid] 定位应用进程对应的线程 tid // 按shift p 组合键,按照CPU占用率排序 > top -Hp 111683.…

纯血鸿蒙APP实战开发——短视频切换实现案例

短视频切换实现案例 介绍 短视频切换在应用开发中是一种常见场景,上下滑动可以切换视频,十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频,再次点击继续播放…

安卓跑马灯效果

跑马灯效果 当一行文本的内容太多,导致无法全部显示,也不想分行展示时,只能让文字从左向右滚动显示,类 似于跑马灯。电视在播报突发新闻时经常在屏幕下方轮播消息文字,比如“ 快讯:我国选手 *** 在刚刚结束…

我独自升级崛起游戏账号登录注册教程 (5.8最新版)

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门,为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素,…

使用PyQt5设计系统登录界面—了解界面布局

前言:自学的过程中充分认识到网络搜索的重要性,有时候一篇通俗易懂的文章会让我这种入门级的小白更易上手,俗话说“开头难,难开头”,只要开了一个好头就不怕知难而退。 如何安装QT Designer界面设计所需要的环境 1. 如…

华为手机连接电脑后电脑无反应、检测不到设备的解决方法

本文介绍华为手机与任意品牌电脑连接时,出现连接后电脑无反应、检测不到手机连接情况的解决方法。 最近,因为手机的存储空间愈发紧缺,所以希望在非华为电脑中,将华为手机内的照片、视频等大文件备份、整理一下。因此,需…

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024)

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024) 会议简介 2024国际化学材料、清洁能源和生物技术大会(ICCMCEB2024)将在长沙隆重举行。本次会议旨在汇聚来自世界各地的化学材料、清洁能源和生物技术领域的专家学者,共同探…

vue管理系统导航中添加新的iconfont的图标

1.在官网上将需要的图标,加入项目中,下载 2.下载的压缩包中,可以选择这两个,复制到项目目录中 3.如果和之前的iconfont有重复,那么就重新命名 4.将这里的.ttf文件,也重命名为自己的 5.在main文件中导入 6.在…

3W 3KVDC 隔离单输出 DC/DC 电源模块——TPG-3W 系列

TPG-3W系列是一款额定功率为3W的隔离产品,国际标准引脚,宽范围工作、温度–40℃ 到 105℃,在此温度范围内都可以稳定输出3W,并且效率非常高,高达88%,同时负载调整率非常低,对于有输出电压精度有…

音频可视化:原生音频API为前端带来的全新可能!

音频API是一组提供给网页开发者的接口,允许他们直接在浏览器中处理音频内容。这些API使得在不依赖任何外部插件的情况下操作和控制音频成为可能。 Web Audio API 可以进行音频的播放、处理、合成以及分析等操作。借助于这些工具,开发者可以实现自定义的音…

MySQL使用GROUP BY使用技巧和注意事项总结

⛰️个人主页: 蒾酒 🔥系列专栏:《mysql经验总结》 目录 写在前面 GROUP BY简介 基本用法 单列分组 多列分组 使用聚合函数 过滤分组结果 按表达式分组 使用 GROUP BY 的排序 注意事项 遵循原则 使用能够唯一标识每个分组的字段或字…

PCB 阻抗设置

凡亿电路有详细的阻抗设计 https://baijiahao.baidu.com/s?id1773006310888936808&wfrspider&forpc 差分基本上是100ohm, 单端是50ohm 布线阻抗通常是, -设置叠层关系 层的定义设计原则: 1)主芯片相临层为地平面,提供器…

Whisper、Voice Engine推出后,训练语音大模型的高质量数据去哪里找?

近期,OpenAI 在语音领域又带给我们惊喜,通过文本输入以及一段 15 秒的音频示例,可以生成既自然又与原声极为接近的语音。值得注意的是,即使是小模型,只需一个 15 秒的样本,也能创造出富有情感且逼真的声音。…

图像处理-图像平滑

图像平滑 前言一、概念介绍1.1 图像的平滑1.2 图像中噪声的分类1.3 MATLAB的添加噪音代码 二、空间域平滑滤波2.1 均值滤波2.2 原理计算 总结 前言 在图像的获取、传输和存储过程常常收到各种噪声的干扰和影响,使得图像的质量下降,为了获得高质量的数字…

CPU炼丹——YOLOv5s

1.Anaconda安装与配置 1.1安装与配置 Anaconda3的安装看下面的教程: 最新Anaconda3的安装配置及使用教程(详细过程)http://t.csdnimg.cn/yygXD,接上面文章下载后,配置环境变量的时候记得在原来你装的Python更下面添…

如何快速找出文件夹里的全部带有英文纯英文的文件

参考此文章:如何快速找出文件夹里的全部带有中文&纯中文的文件 只需要根据自己的需求,把下面相关的设置调整好即可

【Hadoop】MapReduce (六)

MapReduce 组件 输入格式 - InputFormat InputFormat发生在Mapper之前,用于对数据进行切分和读取,会将读取到的数据传递给MapTask处理。所以InputFormat读取到的数据是什么格式,Mapper接收到的数据就是什么格式 作用 getSplits&#xff1a…