1.背景

    採样算法是机器学习中比較经常使用,也比較easy实现的(出去分层採样)。经常使用的採样算法有下面几种(来自百度知道):
   
一、单纯随机抽样(simple random sampling)

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

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

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

二、系统抽样(systematic sampling)

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

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

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

三、整群抽样(cluster sampling)

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

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

缺点:抽样误差大于单纯word=%E9%9A%8F%E6%9C%BA%E6%8A%BD%E6%A0%B7&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="1" log="pos:innerLink">随机抽样。

四、分层抽样(stratified sampling)

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

长处:样本代表性好。word=%E6%8A%BD%E6%A0%B7%E8%AF%AF%E5%B7%AE&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="3" log="pos:innerLink">抽样误差降低。

以上四种基本word=%E6%8A%BD%E6%A0%B7%E6%96%B9%E6%B3%95&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="4" log="pos:innerLink">抽样方法都属单阶段抽样。实际应用中常依据实际情况将整个抽样过程分为若干阶段来进行。称为多阶段抽样。

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

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

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

最新文章

  1. 用php创建mysql数据库
  2. host
  3. LeetCode-Sudoku Solver (递归解法)
  4. Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法
  5. PHP值mysql操作类
  6. 关于hkcmd.exe造成的和Eclipse之间热键冲突
  7. 解析ECC与RECC内存之间的区分
  8. Vs 发布编译问题
  9. python实现简单的登录管理
  10. Jenkins>>>应用篇>>>插件使用>>>Publish over SSH
  11. JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别
  12. Nginx详解二十四:Nginx深度学习篇之灰度发布
  13. phpmyadmin详细的图文使用教程
  14. 创建多线程Thread
  15. JAVA可检测异常和非检测异常
  16. 关于ListBox在Grid中无法充满的问题
  17. php 全局变量问题
  18. Jenkins管理静态资源
  19. BUG_vector iterator not dereferencable
  20. mvc 读写txt文档

热门文章

  1. python+selenium十:基于原生selenium的二次封装
  2. Windows安装使用Openssl
  3. HTTP常见响应状态码
  4. JavaScript错误:Maximum call stack size exceeded错误
  5. Mac配置Node.js环境
  6. 详解如何进行第三方App接入微信登录
  7. hdu 1588 求f(b) +f(k+b) +f(2k+b) +f((n-1)k +b) 之和 (矩阵快速幂)
  8. hdu 1372 骑士从起点走到终点的步数 (BFS)
  9. spring配置redis注解缓存
  10. linux 中的./configuration --prefix=安装路径 的用法(指定源码安装方式的安装路基)