数据不平衡处理方式之过采样和欠采样(Python代码)

这篇具有很好参考价值的文章主要介绍了数据不平衡处理方式之过采样和欠采样(Python代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sklearn.datasets.make_classification
官方地址:
https://www.w3cschool.cn/doc_scikit_learn/scikit_learn-modules-generated-sklearn-datasets-make_classification.html

sklearn.datasets.make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None) [source]

一、过采样与欠采样原理

在进行数据分析建模的过程中,数据不均衡是非常常见的问题,一般可以用过采样,欠采样,过采样+欠采样等发放处理。过采样一般包括随机过采样、插值Smote和KNN分类器的Adasyn;欠采样一般包括随机欠采样、EasyEnsemble、BalanceCascade、NearMiss、Tomek Link、Edited Nearest Neighbours (ENN)等。

过采样,又称上采样(over-sampling),通过增加分类中少数类样本的数量来实现样本均衡。
如SMOTE算法,通过插值生成合成样本,非直接对少数类进行重采样,从而使得少数类样本的特征空间得到扩展,有助于模型更好地探索和学习少数类的特征,提高模型的性能。其主要步骤如下:

  1. 在少数类样本中随机选一个样本
  2. 找到该样本的K个近邻(假设K = 5)
  3. 随机从K个近邻中选出一个样本
  4. 在该样本和随机选出的这个近邻样本之间的连线上,随机找一点,即是人工合成的新样本
  5. 重复上述步骤,生成指定数量的合成样本

欠采样,又称下采样(under-sampling),其通过减少分类中多数类样本的数量来实现样本均衡。
如随机欠采样,随机从多数类样本中抽取一部分数据进行删除,随机欠采样有一个很大的缺点是未考虑样本的分布情况,而采样过程又具有很大的随机性,可能会误删多数类样本中一些重要的信息。

二、代码示例
# -*- coding: utf-8 -*-
import numpy as np
from imblearn.over_sampling import SMOTE
from imblearn.over_sampling import RandomOverSampler
from imblearn.over_sampling import ADASYN
from imblearn.under_sampling import RandomUnderSampler
from imblearn.under_sampling import NearMiss
from sklearn.datasets import make_classification

# 随机生成原始数据
x, y = make_classification(n_samples=1000, n_features=5, n_classes=2,
                           weights=[0.1, 0.9], random_state=123)
print('原始正样本数:', np.sum(y == 1), '原始负样本数:', np.sum(y == 0),   '原始总数:', len(x))


# smote过采样
smote = SMOTE()
x_new, y_new = smote.fit_resample(x, y)
print('smote后正样本数:', np.sum(y_new == 1), 'smote后负样本数:', np.sum(y_new == 0), 'smote后总数:', len(x_new))

# 随机欠采样
rus = RandomUnderSampler()
x_new2, y_new2 = rus.fit_resample(x, y)
print('随机欠采样后正样本数:', np.sum(y_new2 == 1), '随机欠采样后负样本数:', np.sum(y_new2 == 0), '随机欠采样后总数:', len(x_new2))

结果展示:
欠采样代码,数据处理篇,python,开发语言,sklearn

附录

=================================================
make_classification分类函数参数

1.n_samples:int, optional (default=100)
样本的数量

2.n_features:int, optional (default=20)
样本的特征数

3.n_informative:int, optional (default=2)
样本中有用的特征数量。这个参数只有当数据集的分类数为2时才有效

4.n_redundant:int, optional (default=2)
样本中冗余特征的数量,这些特征是从有用特征中随机组合而成的

5.n_repeated: int,int, optional (default=0)
从信息特征和冗余特征中随机抽取的重复特征的数量。

6.n_classes:int, optional (default=2)
数据集分类的数量

7.n_clusters_per_class: int, optional (default=2)
每个类的簇数。

8.weights : list of floats or None (default=None)
分配给每个类别的样本比例。如果无,则类是平衡的。请注意,如果len(weights)=n_classes-1,则会自动推断出最后一个类的权重。如果权重之和超过1,则可以返回多于n_samples的样本。

9.flip_y : float, optional (default=0.01)
类被随机交换的样本的分数。

10.random_state:int, RandomState instance or None, optional (default=None)
随机数的种子文章来源地址https://www.toymoban.com/news/detail-838036.html

到了这里,关于数据不平衡处理方式之过采样和欠采样(Python代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 处理不平衡数据的方法小结(算法层面)

    方法一:有序加权平均: OWA有序加权平均算法是一种用于处理不平衡数据的算法。在OWA中,不同的数据被赋予不同的权重,然后根据这些权重进行加权平均计算。这种方法可以有效地处理不平衡数据,并且可以为不同的数据类型提供不同的重要性。详情可参考IFROWANN文章。(

    2024年02月04日
    浏览(45)
  • 人工智能安全-2-非平衡数据处理

    现象与原因 非平衡数据处理方法概览 数据预处理层面 特征层 算法层面 非平衡数据分类问题 :在网络信息安全问题中,诸如 恶意软件检测、SQL注入、不良信息检测等 许多问题都可以归结为机器学习分类问题。这类机器学习应用问题中,普遍存在非平衡数据的现象。 产生的

    2024年02月14日
    浏览(49)
  • 机器学习Caret--R处理不平衡数据

    不平衡数据集指的是数据集各个类别的样本数目相差巨大,例如2000的人群中,某疾病的发生只有100 (5%)人,那么疾病发生与不发生为 1:19 。这种情况下的数据称为不平衡数据。在真实世界中,不管是二分类或三分类,不平衡数据的现象普遍存在,尤其是罕见病领域。 image.

    2024年01月16日
    浏览(46)
  • 人工智能安全-2-非平衡数据处理(1)

    现象与原因 非平衡数据处理方法概览 数据预处理层面 特征层 算法层面 非平衡数据分类问题 :在网络信息安全问题中,诸如 恶意软件检测、SQL注入、不良信息检测等 许多问题都可以归结为机器学习分类问题。这类机器学习应用问题中,普遍存在非平衡数据的现象。 产生的

    2024年02月06日
    浏览(62)
  • 第34步 机器学习实战DLC:不平衡数据处理(上)

    失踪人口回归的第一期,来说一说不平衡数据。 一、不平衡数据的概念 什么是不平衡数据?我们先来看看小Chat怎么说的:   顾名思义,就是你的因变量1和0的样本数差距有点大, 大到影响了模型性能。举个栗子,一个盒子里有100个红球,10个黄球,我们随机盲抽一个球,然

    2024年02月08日
    浏览(47)
  • Python两种读取txt与csv文件方式(利用numpy处理数据)

    一共80个数据(只截取前10个数据) 在excel中显示的内容 在pycharm中显示的内容 一共80个数据 在记事本中显示的内容 在pycharm中显示的内容 1、读取所有内容 data_pd打印结果 2、数据转为numpy data_np打印结果 1、读取所有内容 data_pd打印结果 2、数据转为numpy data_np打印结果 1、读取所

    2023年04月11日
    浏览(59)
  • 数据挖掘学习——数据预处理方法代码汇总(python)

    目录 一、归一化处理方法 (1)min-max方法(离散归一化) (2)零-均值规范化方法 (3)小数定标规范化 二、插值法 (1)拉格朗日插值法 三、相关性分析 (1)pearson相关性系数 (2)spearman相关性系数 四、主成分分析(PCA) 归一化常用方法有: (1)min-max方法(离散归一化

    2024年02月08日
    浏览(71)
  • 常用python代码大全-python使用json模块处理JSON数据

    在Python中, json 模块提供了一种简单的方法来编码和解码JSON数据。以下是一个简单的例子,说明如何使用 json 模块来处理JSON数据。 首先,我们需要导入 json 模块: 编码(Encode)JSON 数据 要将Python对象编码为JSON格式,我们可以使用 json.dumps() 函数。这个函数将Python对象转换为

    2024年01月20日
    浏览(63)
  • 【Python】数据预处理之将类别数据转换为数值的方法(含Python代码分析)

    在进行Python数据分析的时候,首先要进行数据预处理。但是有时候不得不处理一些非数值类别的数据,遇到这类问题时该怎么解决呢? 目前为止,总结了三种方法,这里分享给大家。 这种方法是属于映射字典将类标转换为整数,不过这种方法适用范围有限。 我们首先创建一

    2024年02月09日
    浏览(59)
  • 三行Python代码,让数据处理速度提高2到6倍

    Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时,一些问题就会显现 …… 在默认情况下, Python 程序是单个进程,使用单 CPU 核心执行。而大多数当代机器学习硬件都至少搭载了双核处理器。这意味着

    2023年04月18日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包