特征工程:数据平衡

目录


一、前言

二、正文

Ⅰ.基于过采样算法

Ⅱ.基于欠采样算法

Ⅲ..基于过采样和欠采样的综合算法

三、结语


一、前言

大多数情况下,使用的数据集是不完美的,会出现各种各样的问题,尤其针对分类问题的时候,会出现类别不平衡的问题。例如:在垃圾邮件分类时,垃圾邮件数据会有较少的样本量,从而导致两种类型的邮件数据量差别很大;在欺诈监测数据集中,往往包含的欺诈样本并没有那么多。处理这类数据集的分类的时候,需要对数据集的类不平衡问题进行处理。 

二、正文

  

Ⅰ.基于过采样算法

from imblearn.datasets import make_imbalance
from imblearn.over_sampling import KMeansSMOTE,SMOTE,SVMSMOTE
from imblearn.under_sampling import AllKNN,CondensedNearestNeighbour,NearMiss
from imblearn.combine import SMOTEENN,SMOTETomek
im_x,im_y=make_imbalance(pca_wine_x,wine_y,sampling_strategy={0:30,1:70,2:20},randim_state=12)
print(np.unique(im_y,return_counts=True))
#输出结果
(array([0, 1, 2]), array([30, 70, 20], dtype=int64))

首先准备不配合的数据将其读取,这些都是前面用过的。imblearn则是专门处理数据不平衡问题的库。

kmeans=KMeansSMOTE(random_state=123,k_neighbors=3)
kmeans_x,kmeans_y=kmeans.fit_resample(im_x,im_y)
print("KMeansSMOTE:",np.unique(kmeans_y,return_counts=True))
smote=SMOTE(random_state=123,k_neighbors=3)
smote_x,smote_y=smote.fit_resample(im_x,im_y)
print("SMOTE:",np.unique(smote_y,return_counts=True))
svm=SVMSMOTE(random_state=123,k_neighbors=3)
svm_x,svm_y=svm.fit_resample(im_x,im_y)
print("SvmSMOTE:",np.unique(svm_y,return_counts=True))SVMSMOTE
#输出结果
KMeansSMOTE: (array([0, 1, 2]), array([71, 70, 70], dtype=int64))SMOTE:    (array([0, 1, 2]), array([70, 70, 70], dtype=int64))SvmSMOTE:  (array([0, 1, 2]), array([70, 70, 53], dtype=int64))

针对数据平衡方法---过采样,可使用以上方法。

接下来我们通过可视化,把类别数据量展现:

colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(10,6))
plt.subplot(2,2,1)
plt.title('Ori')
for ii,y in enumerate(im_y):plt.scatter(im_x[ii,0],im_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,2)
plt.title('Kmeans')
for ii,y in enumerate(kmeans_y):plt.scatter(kmeans_x[ii,0],kmeans_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,3)
plt.title('smote')
for ii,y in enumerate(smote_y):plt.scatter(smote_x[ii,0],smote_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,4)
plt.title('svms')
for ii,y in enumerate(svm_y):plt.scatter(svm_x[ii,0],svm_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.show()

 让三种数据的类别比例接近 1:1:1,用四个图来对比更加直观。

 

不同算法生成的位置是有所差异的,在少样本的数据类周围生成新的样本数量。 

Ⅱ.基于欠采样算法

cnn=CondensedNearestNeighbour(random_state=123,n_neighbors=7,n_seeds_S=20)
cnn_x,cnn_y=cnn.fit_resample(im_x,im_y)
print("CondensedNearestNeighbour:",np.unique(cnn_y,return_counts=True))allknn=AllKNN(n_neighbors=10)
allknn_x,allknn_y=allknn.fit_resample(im_x,im_y)
print("AllKNN:",np.unique(allknn_y,return_counts=True))nmiss=NearMiss(n_neighbors=3)
nmiss_x,nmiss_y=nmiss.fit_resample(im_x,im_y)
print("NearMiss:",np.unique(nmiss_y,return_counts=True))#输出结果
CondensedNearestNeighbour: (array([0, 1, 2]), array([20, 22, 20], dtype=int64))
AllKNN: (array([0, 1, 2]), array([22, 56, 20], dtype=int64))
NearMiss: (array([0, 1, 2]), array([20, 20, 20], dtype=int64))

针对数据平衡的方法一一欠采样,如上介绍的方法都是使用特定的方法减少样本数量较多类别的样本量,从而使三种数据的样本接近1:1:1。通过可视化有如下效果:

from imblearn.under_sampling import AllKNN,CondensedNearestNeighbour,NearMiss
colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(14,10))
plt.subplot(2,2,1)
plt.title('Ori')
for ii,y in enumerate(im_y):plt.scatter(im_x[ii,0],im_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,2)
plt.title('CondensedNearestNeighbour')
for ii,y in enumerate(cnn_y):plt.scatter(cnn_x[ii,0],cnn_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,3)
plt.title('AllKNN')
for ii,y in enumerate(allknn_y):plt.scatter(allknn_x[ii,0],allknn_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(2,2,4)
plt.title('svms')
for ii,y in enumerate(nmiss_y):plt.scatter(nmiss_x[ii,0],nmiss_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.show()

没有什么特别的变化,只是改变了要展现的变量名,然后通过迭代散点绘制而成。 

从中可以看出三种欠采样算法都是减少样本量较多的数据样本,但是不同的算法减去的样本位置和数量有所差异。 

Ⅲ..基于过采样和欠采样的综合算法

from imblearn.combine import SMOTEENN,SMOTETomek
smoteenn=SMOTEENN(random_state=123)
smoteenn_x,smoteenn_y=smoteenn.fit_resample(im_x,im_y)
print("SMOTEENN:",np.unique(smoteenn_y,return_counts=True))
#输出结果
SMOTEENN: (array([0, 1, 2]), array([67, 64, 69], dtype=int64))smoteet=SMOTETomek(random_state=123)
smoteet_x,smoteet_y=smoteet.fit_resample(im_x,im_y)
print("SMOTETomek:",np.unique(smoteet_y,return_counts=True))
#输出结果
SMOTETomek: (array([0, 1, 2]), array([69, 69, 70], dtype=int64))

根据上面三种也是能够看出类别比例接近1:1:1,但是只有后者的方法更加接近这个规律,那我们通过可视化观察一番:

colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(14,10))
plt.subplot(1,2,1)
plt.title('Smoteenn')
for ii,y in enumerate(smoteenn_y):plt.scatter(smoteenn_x[ii,0],smoteenn_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.subplot(1,2,2)
plt.title('Smoteet')
for ii,y in enumerate(smoteet_y):plt.scatter(smoteet_x[ii,0],smoteet_x[ii,1],s=40,c=colors[y],marker=shape[y])plt.show()

 方法也是没有多大的改变,照葫芦画瓢。

与其他采样的结果一样,可以看到样本位置上的差异。

三、结语

数据分析的整个过程的介绍就结束了,那接下来就是关于模型的选择与评估问题,只不过对数据分析着实重要,在之后的几篇当中,我们需要对数据分析有着更加细致的了解或者案例切入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ的延迟队列实现[死信队列](笔记一)

关于死信队列的使用场景不再强调,只针对服务端配置 注意: 本文只针对实现死信队列的rabbitMQ基本配置步骤进行阐述和实现 目录 1、docker-compose 安装rabbitMq2、查看对应的版本及插件下载3、安装插件和检测 1、docker-compose 安装rabbitMq a、使用d…

【Java EE初阶十二】网络初识

1. 网络发展史 网络发展的几个主要时期: 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互…

Linux文本三剑客(2)

文章目录 一、Linux文本三剑客之awk使用方法awk 的原理实例一:只查看test.txt文件(100行)内第20到第30行的内容(企业面试)实例二:已知test.txt文件内容为 BEGIN 和 END 模块实例一:统计/etc/pas…

【Qt 学习之路】在 Qt 使用 ZeroMQ

文章目录 1、概述2、ZeroMQ介绍2.1、ZeroMQ 是什么2.2、ZeroMQ 主线程与I/O线程2.3、ZeroMQ 4种模型2.4、ZeroMQ 相关地址 3、Qt 使用 ZeroMQ3.1、下载 ZeroMQ3.2、添加 ZeroMQ 库3.3、使用 ZeroMQ3.4、相关 ZeroMQ 案例 1、概述 今天是大年初一,先给大家拜个年&am…

移动端web开发布局

目录 flex布局: flex布局父项常见属性: flex布局子项常见属性: REM适配布局: 响应式布局: flex布局: 需要先给父类盒子设置display:flex flex是flexiblebox的缩写,意为"弹…

【51单片机】添加模块代码的常见问题(图示&代码演示)

前言 大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 本章节是Lcd1602章节的一部分,以把4个Lcd驱动程序添加为例子,完整传送门在下方传送门 欢迎订阅 YY滴C专栏&…

提升MySQL访问性能

1. 读写分离 设置多个从数据库,从数据库可能在多个机器中。写操作在主数据库进行主数据库提供数据的主要依据 缓解了MySQL的读压力。 主从复制原理图如下 如果对于读操作有一致性要求,那么读操作去主数据库即可。 2. 连接池 因为一个请求必须要…

基于springboot广场舞团管理系统源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

内存管理 | 进程地址空间

文章目录 1.进程地址空间的理解2.将虚拟地址转换为物理地址3.进程地址空间的设计4.进程地址空间的好处 1.进程地址空间的理解 在 前文 分享的fork创建子进程的系统调用中,一个变量接收了两个不同的返回值!通过推测也知道,那个地址绝不是真是…

分享66个相册特效,总有一款适合您

分享66个相册特效,总有一款适合您 66个相册特效下载链接:https://pan.baidu.com/s/1jqctaho4sL_iGSNExhWB6A?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

【java苍穹外卖项目实战二】苍穹外卖环境搭建

文章目录 1、前端环境搭建2、后端环境搭建1、项目结构搭建2、Git版本控制3、数据库创建 开发环境搭建主要包含前端环境和后端环境两部分。 前端的页面我们只需要导入资料中的nginx, 前端页面的代码我们只需要能看懂即可。 1、前端环境搭建 前端运行环境的nginx&am…

STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍

文章目录 1. 介绍FSMC2. FSMC特点3. Block示意图4. AHB接口4.1 Supported memories and transactionsGeneral transaction rulesConfiguration registers 5. 外部设备地址映射5.1 NOR/PSRAM地址映射将NOR Flash/PSRAM的支持进行封装 5.2 NAND/PC Card地址映射 1. 介绍FSMC 说到…

使用python-numpy实现一个简单神经网络

目录 前言 导入numpy并初始化数据和激活函数 初始化学习率和模型参数 迭代更新模型参数(权重) 小彩蛋 前言 这篇文章,小编带大家使用python-numpy实现一个简单的三层神经网络,不使用pytorch等深度学习框架,来理解…

TELNET 远程终端协议

远程终端协议 TELNET TELNET 是一个简单的远程终端协议,也是互联网的正式标准。 用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。 TELNET 能将用户的击键传到…

使用cocos2d-console初始化一个项目

先下载好cocos2d-x的源码包 地址 https://www.cocos.com/cocos2dx-download 这里使用的版本是 自己的电脑要先装好python27 用python安装cocos2d-console 看到项目中有个setup.py的一个文件 python setup.py 用上面的命令执行一下。 如果执行正常的话回出现上面的图 然后…

每日五道java面试题之java基础篇(二)

第一题. 为什么说 Java 语⾔“编译与解释并存”? ⾼级编程语⾔按照程序的执⾏⽅式分为编译型和解释型两种。 简单来说,编译型语⾔是指编译器针对特定的操作系统将源代码⼀次性翻译成可被该平台执⾏的机器码;解释型语⾔是指解释器对源程序逐…

前端JavaScript篇之call() 和 apply() 的区别?

目录 call() 和 apply() 的区别? call() 和 apply() 的区别? 在JavaScript中,call()和apply()都是用来改变函数中this指向的方法,它们的作用是一样的,只是传参的方式不同。 call()方法和apply()方法的第一个参数都是…

4核8g服务器能支持多少人访问?2024新版测评

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

js-添加网页快捷方式

title: js-添加网页快捷方式 categories: Javascript tags: [p快捷方式] date: 2024-02-04 15:28:25 comments: false mathjax: true toc: true js-添加网页快捷方式 前篇 谷歌上包困难的情况, 只能通过投放落地页来缓解一下痛苦, web2app 那种形式有几个比较大的缺点就是需要…

MongoDB部署策略

内 容 简 介 本文介绍了MongoDB数据库的优点的数据存储模式的安装部署过程。 利用MongoDB在存储海量数据上的优势,部署存储空间大数据。 欢迎批评指正补充 由于编者水平有限,所搜集资料也很有限,制定的规范肯定有考虑不周全、甚至完全错误…