python实现分层随机抽样算法_【机器学习算法-python实现】採样算法的简单实现...

一、单纯随机抽样(simple random sampling)

将调查整体所有观察单位编号,再用抽签法或随机数字表随机抽取部分观察单位组成样本。

长处:操作简单,均数、率及对应的标准误计算简单。

缺点:整体较大时,难以一一编号。

二、系统抽样(systematic sampling

)

又称机械抽样、等距抽样,即先将整体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k号观察单位。依次用相等间距,从每一部分各抽取一个观察单位组成样本。

长处:易于理解、简便易行。

缺点:整体有周期或增减趋势时,易产生偏性。

三、整群抽样(cluster sampling)

整体分群。再随机抽取几个群组成样本,群内所有调查。

长处:便于组织、节省经费。

缺点:抽样误差大于单纯随机抽样。

四、分层抽样(stratified sampling)

先按对观察指标影响较大的某种特征。将整体分为若干个类别,再从每一层内随机抽取一定数量的观察单位,合起来组成样本。有按比例分配和最优分配两种方案。

长处:样本代表性好。抽样误差降低。

以上四种基本抽样方法都属单阶段抽样。实际应用中常依据实际情况将整个抽样过程分为若干阶段来进行。称为多阶段抽样。

各种抽样方法的抽样误差通常是:整群抽样≥单纯随机抽样≥系统抽样≥分层抽样

2.代码实现

无放回抽样:随机抽样(RandomSampling)和系统抽样(SystematicSampling)。

有放回抽样:随机抽样(RepetitionRandomSampling)。

'''

Sampling archive

@author: Garvin Li

'''

import random

def loadDataSet(fileName): #general function to parse tab -delimited floats

dataMat = [] #assume last column is target value

fr = open(fileName)

for line in fr.readlines():

curLine = line.strip().split('\t')

# fltLine = map(float,curLine) #map all elements to float()

dataMat.append(curLine)

return dataMat

def RandomSampling(dataMat,number):

try:

slice = random.sample(dataMat, number)

return slice

except:

print 'sample larger than population'

def RepetitionRandomSampling(dataMat,number):

sample=[]

for i in range(number):

sample.append(dataMat[random.randint(0,len(dataMat)-1)])

return sample

def SystematicSampling(dataMat,number):

length=len(dataMat)

k=length/number

sample=[]

i=0

if k>0 :

while len(sample)!=number:

sample.append(dataMat[0+i*k])

i+=1

return sample

else :

return RandomSampling(dataMat,number)

if __name__=='__main__':

dataMat=loadDataSet('/Users/hakuri/Desktop/data1.txt')

# print RandomSampling(dataMat,7)

# RepetitionSampling(dataMat,4)

print SystematicSampling(dataMat,9)

測试结果就不单独上图了,測试集和代码都提供下载。有兴趣能够去看一下。

过一段把高级聚类算法写好,实现一下分层抽样。

下载地址:点击我

/********************************

* 本文来自博客  “李博Garvin“

******************************************/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值