原标题:数据预处理-采样
原文来自:博客园 原文链接:https://www.cnblogs.com/xuxiaowen1990/p/10774268.html
采样就是按照某种规则从数据集中挑选样本数据,大致分为3类:随机采样、系统采样和分层采样。
随机采样:就是从数据集中随机的抽取特定数量的数据,分为有放回和无放回两种。
import randomdef 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 randomdef 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 randomdef 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:Anaconda3python.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]]
以上内容摘自《机器学习实践应用》
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com