采样就是按照某种规则从数据集中挑选样本数据,大致分为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
以上内容摘自《机器学习实践应用》