数据预处理-采样

采样就是按照某种规则从数据集中挑选样本数据,大致分为3类:随机采样、系统采样和分层采样。

随机采样:就是从数据集中随机的抽取特定数量的数据,分为有放回和无放回两种。

import random

def noRepetRandomSampling(dataMat,number):
    '''
    无放回采样
    :param dataMat: 数据集
    :param number: 采样数
    :return: sample 采样到的数据
    '''
    try:
        length = len(dataMat)
        sample = random.sample(dataMat, number)
        return sample
    except Exception as e:
        print(e)

def repetRandomSampling(dataMat,number):
    '''
    有放回采样
    :param dataMat: 数据集
    :param number: 采样数
    :return: sample 采样到的数据
    '''
    sample = []
    i = 0
    while(i<number):
        sample.append(dataMat[random.randint(0,len(dataMat)-1)])  #randint的范围是a<=x<=b,包括上限,注意要减一
        i+=1
    return sample

 

系统采样:一般是无放回抽样,又称等距采样,先将总体数据集按顺序分成n小份,再从每小份抽取第k个数据。

import random

def systemSampling(dataMat,number):
    '''
    系统采样
    :param dataMat: 数据集
    :param number: 采样数
    :return: sample 采样到的数据
    '''
    length=len(dataMat)
    k=int(length/number)
    sample=[]
    i=0
    if k>0:
        while (i<number):
            sample.append(dataMat[0+i*k])
            i+=1
        return sample
    else:
        return repetRandomSampling(dataMat,number)

分层采样:就是先将数据分成若干个类别,再从每一层内随机抽取一定数量的样本,然后将这些样本组合起来。

 

import random

def stratifiedSampling(dataMat1,dataMat2,dataMat3,number):
    '''
    分层采样
    :param dataMat1: 数据集1
    :param dataMat2: 数据集2
    :param dataMat3: 数据集3
    :param number: 采样数
    :return: sample 采样到的数据
    '''
    subNumber=int(number/3)
    sample=[]
    sample.append(noRepetRandomSampling(dataMat1,subNumber))
    sample.append(noRepetRandomSampling(dataMat2,subNumber))
    sample.append(noRepetRandomSampling(dataMat3,subNumber))
    return sample

 测试代码:

 

dataMat=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
dataMat1=[101,102,103,104,105,106,107,108,109,110]
dataMat2=[201,202,203,204,205,206,207,208,209,210]
dataMat3=[301,302,303,304,305,306,307,308,309,310]

print(repetRandomSampling(dataMat,6))
print(noRepetRandomSampling(dataMat,6))
print(systemSampling(dataMat,6))
print(stratifiedSampling(dataMat1,dataMat2,dataMat3,6))

运行结果:

E:\Anaconda3\python.exe E:/数据采样.py
[8, 1, 8, 13, 19, 3]
[14, 8, 5, 1, 17, 16]
[1, 4, 7, 10, 13, 16]
[[108, 105], [201, 208], [301, 308]]

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值