您的位置:首页 > 编程语言 > Python开发

【机器学习算法-python实现】采样算法的简单实现

2014-07-14 16:05 525 查看

1.背景

采样算法是机器学习中比较常用,也比较容易实现的(出去分层采样)。常用的采样算法有以下几种(来自百度知道):
一、单纯随机抽样(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“* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: