【附代码】python采样方法集锦

这篇具有很好参考价值的文章主要介绍了【附代码】python采样方法集锦。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✅作者简介:在读博士,伪程序媛,人工智能领域学习者,深耕机器学习,交叉学科实践者,周更前沿文章解读,提供科研小工具,分享科研经验,欢迎交流!
📌个人主页: https://blog.csdn.net/allein_STR?spm=1011.2559.3001.5343
💯特色专栏:深度学习和WRF,提供人工智能方方面面小姿势,从基础到进阶,教程全面。
📞联系博主:博文留言+主页左侧推广方式+WeChat code: Allein_STR
📙本文内容:介绍7种主要的采样方法,并给出python代码示例。

1.随机采样

python代码:

import random

sample = random.sample(population, k)

解读:

random.sample()函数从population中随机选择k个元素作为样本,返回一个列表。其中population可以是一个序列、集合或其他可迭代对象,k为采样数量。

2.等距采样

python代码

import numpy as np

sample = np.linspace(start, stop, num)

解读:

numpy.linspace()函数返回一个等距的样本数组,其中start和stop分别为样本的起始值和结束值,num为采样数量。

3.分层采样

python代码

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y)

解读:

sklearn.model_selection中的train_test_split()函数可以进行分层采样,其中test_size为测试集占比,stratify参数指定分层变量,即按照y的分布进行采样。

4.重采样

python代码

from sklearn.utils import resample

sample = resample(data, n_samples=n)

解读:

sklearn.utils中的resample()函数可以进行重采样,其中data为原始数据,n_samples为采样数量。

以上是常用的Python采样方法及其代码解读。

5.水塘采样(Reservoir sampling)

主要用于解决大数据流中的随机抽样问题,即:当内存有限,数据长度很大,甚至未知,那么如何从中随机选取k个数据,并且要求是等概率

水塘抽样的核心是,只遍历一次,每次都考虑一个问题:当前元素是否被选中,选中后替换之前选中的哪一个元素。

采样过程:集合中总元素个数为n,随机选取k个元素

step1.首先将前k个元素全部选取。

step2.对于第i个元素(i>k),以概率k/i来决定是否保留该元素,如果保留该元素的话,则随机丢弃掉原有的k个元素中的一个(即原来某个元素被丢掉的概率是1/k)。

结果:每个元素被最终被选取的概率都是k/n。

python代码

假设我们必须从无限大的流中抽取 5 个对象,且每个元素被选中的概率都相等。

import randomdef generator(max):
 number = 1
 while number < max:
 number += 1
 yield number# Create as stream generator
stream = generator(10000)# Doing Reservoir Sampling from the stream
k=5
reservoir = []
for i, element in enumerate(stream):
 if i+1<= k:
 reservoir.append(element)
 else:
 probability = k/(i+1)
 if random.random() < probability:
 # Select item in stream and remove one of the k items already selected
 reservoir[random.choice(range(0,k))] = elementprint(reservoir)
------------------------------------
[1369, 4108, 9986, 828, 5589]

另一种python代码

要随机选择K个元素,那么在遍历到第i个元素时,以k/i的概率选择该元素。

def reservoirSamplingk(arr, k):
    res = arr[:k]
    i = k
    while i < len(arr):
        # 以k/i的概率选取第i个元素,用来等概率的替换之前选中的1个元素
        r = random.randint(0, i)
        if r < k:  # 小于k的概率就是k/i,替换res中第r个已选中的数
            res[r] = arr[i]
        i += 1
    return res

6.随机欠采样和过采样

【附代码】python采样方法集锦

我们经常会遇到不平衡的数据集。

一种广泛采用的处理高度不平衡数据集的技术称为重采样。它包括从多数类(欠采样)中删除样本或向少数类(过采样)中添加更多示例。这里只介绍部分算法,其他详细请见博文:

python代码

先创建一些不平衡数据示例。

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
from collections import Counter

# 1.创建类别不平衡的数据集:
# 使用make_classification生成样本数据
X, y = make_classification(n_samples=5000,
                           n_features=2,  # 特征个数 = n_informative() + n_redundant + n_repeated
                           n_informative=2,  # 多信息特征的个数
                           n_redundant=0,  # 冗余信息,informative特征的随机线性组合
                           n_repeated=0,  # 重复信息,随机提取n_informative和n_redundant 特征
                           n_classes=3,  # 分类类别
                           n_clusters_per_class=1,  # 某一个类别是有几个cluster构成的
                           weights=[0.01, 0.05, 0.94],  # 列表类型,权重比
                           random_state=0
                           )

# 2.查看各个标签的样本:
counter = Counter(y)
print(counter) # Counter({2: 4674, 1: 262, 0: 64})

# 3.数据集可视化:
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
【附代码】python采样方法集锦
# 4、过采样 
# 4.1 随机过采样
ros = RandomOverSampler(random_state=0)

X_resampled, y_resampled = ros.fit_resample(X, y)
counter_resampled = Counter(y_resampled)
print(counter_resampled)

plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()
【附代码】python采样方法集锦

随机过采样的缺点:

(1)对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。

(2)另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

(3)为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE算法

7.使用 imbalanced-learn 进行欠采样和过采样

imbalanced-learn(imblearn)是一个用于解决不平衡数据集问题的 python 包,它提供了多种方法来进行欠采样和过采样。

7.1使用 Tomek Links 进行欠采样

如果两个样本点互为最近邻且分属于不同类别,则在它们之间形成Tomek’s link,通过参数sampling_strategy可以选择剔除的样本类别。

python代码

from imblearn.under_sampling import TomekLinks
tl = TomekLinks(sampling_strategy='auto') # 移除多数类样本
# tl = TomekLinks(sampling_strategy='all') # 多数类样本和少数类样本都移除
X_res, y_res = tl.fit_resample(X, y)

7.2使用 SMOTE 进行过采样

Synthetic Minority Oversampling Technique (SMOTE),通过插值来生成新样本,对于每个少数类样本计算其K个最近的少数类邻居,然后根据采样比率随机选择若干邻居,最后在少数类样本与邻居样本之间进行插值生成新样本。


from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)

imbLearn 包中还有许多其他方法,可以用于欠采样(Cluster Centroids, NearMiss 等)和过采样(ADASYN 和 bSMOTE)。


本篇到这里就结束了。想学习更多Python、人工智能、交叉学科相关知识,点击关注博主,带你从基础到进阶。若有需要提供科研指导、代码支持,资源获取或者付费咨询的伙伴们,可以添加博主个人联系方式!

码字不易,希望大家可以点赞+收藏+关注+评论!


参考资料:

https://www.jianshu.com/p/b24c3177ea47

https://zhuanlan.zhihu.com/p/76024846文章来源地址https://www.toymoban.com/news/detail-462601.html

到了这里,关于【附代码】python采样方法集锦的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 三种点云下采样方法(二)— open3d python

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。          点云下采样是对点云以一定的采样规则重新进行采样,目的是在保证点云整体几何特征不变的情况

    2023年04月08日
    浏览(47)
  • 常用单行代码集锦

    1.生成0-99数组  2. 随机打乱数组 3.数组去重 4.数组取交集 5.返回数组中最大/最小元素的索引 6.取出数组中最接近数值 7.矩阵行列交换 8.手机号码格式化 9.补零 10.删除无效属性 11.字符串转对象 12.比较两个对象 13.颜色值16进制转rgb 14.生成uuid 15.强制延迟执行

    2024年02月13日
    浏览(28)
  • ElasticSearch 报错集锦及解决方法

    1. Django 扩展 Elasticsearch - 启动与关闭 - 启动报错问题解决方法 2. Centos 7 安装Elasticsearch 6.2.4 - tar 包安装 - elasticsearch head(浏览器插件)和kibana 插件 tar 安装 1. Elasticsearch启动问题小记 在笔者看来,无非就是要把解压后的 elasticsearch 放到,创建好的 用户目录下,所以就不会出现

    2024年02月15日
    浏览(50)
  • 提示-bash: command not found的解决方法集锦

      最近很多小伙伴私信我说老是遇到命令找不到的情况,这里开一篇插个队说一下这个问题,做个总结。当我们在 Linux(或shell)下执行一个命令时,报 -bash: XXXX: command not found,有三个可能的原因: 你将命令的名称拼错了。 该命令还没有安装。 该命令是一个可执行脚本,

    2024年02月09日
    浏览(50)
  • 【概率方法】重要性采样

    假设我们有一个关于随机变量 X X X 的函数 f ( X ) f(X) f ( X ) ,满足如下分布 p ( X ) p(X) p ( X ) 0.9 0.1 f ( X ) f(X) f ( X ) 0.1 0.9 如果我们要对 f ( X ) f(X) f ( X ) 的期望 E p [ f ( X ) ] mathbb{E}_p[f(X)] E p ​ [ f ( X ) ] 进行估计,并且我们有一些从 p p p 中采样的样本,那么朴素的想法是,直接

    2024年02月04日
    浏览(45)
  • 【机器学习】采样方法

    什么是采样 从一个分布中生成一批服从该分布的样本 ,该过程叫采样.采样本质上是对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。采样可以让人们对随机事件及其产生过程有更直观的认识. 蒙特卡洛 要解决的问题:寻找某个定义在概率分布𝑝

    2024年02月06日
    浏览(48)
  • 【NLP文本分类算法集锦】零基础入门经典文本分类项目实战(附代码+数据集)

    大家好,我是阿光。 本专栏整理了《NLP文本分类算法集锦》,内包含了各种常见的中英文文本分类算法,以及常见的NLP任务:情感分析、新闻分类以及谣言检测等。 文本分类是NLP的必备入门任务,在搜索、推荐、对话等场景中随处可见,并有情感分析、新闻分类、标签分类

    2023年04月20日
    浏览(43)
  • 通信采样点原理及计算方法

    采样点是节点判断信号逻辑电平的位置,对CAN总线来说极其重要,尤其在整车组网的时候,多个节点要保持同一个采样点。 CAN网络在通信过程需要通过对总线电平进行采样,从而判断信号逻辑是0还是1.若网络中节点采样点不一致可能会导致同样的采样频率出现采样错误,进而

    2024年02月05日
    浏览(37)
  • 【概率方法】MCMC 之 Gibbs 采样

    上一篇文章讲到,MCMC 中的 HM 算法,它可以解决拒绝采样效率低的问题,但是实际上,当维度高的时候 HM 算法还是在同时处理多个维度,以两个变量 x = [ x , y ] mathbf{x} = [x,y] x = [ x , y ] 来说,也就是同时从联合分布里面 p ( x ) = p ( x , y ) p(mathbf{x}) = p(x,y) p ( x ) = p ( x , y ) 进行

    2024年02月04日
    浏览(37)
  • 基于采样的规划算法之动态规划方法

    经过前面对RRT的介绍,我们发现基于采样的规划算法与基于图搜索的规划算法都是通过对路径树进行拓展新节点,来找到起点到终点的路径解。RRT家族通过随机采样来生成这棵路径树,随机采样会面临采样低效的问题——大部分采样的新节点都无益于提升路径解的最优性。动

    2024年02月11日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包