zoukankan      html  css  js  c++  java
  • 【机器学习算法-python实现】採样算法的简单实现

    1.背景

        採样算法是机器学习中比較经常使用,也比較easy实现的(出去分层採样)。经常使用的採样算法有下面几种(来自百度知道):
       
    一、单纯随机抽样(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('	')
    #         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

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



  • 相关阅读:
    Javaweb学习12.4
    Javaweb学习11.23
    Javaweb学习11.29
    Javaweb学习12.3
    Javaweb学习12.1
    Javaweb学习11.27
    2020年8月25日Java学习日记
    2020年8月18日Java学习日记
    2020年8月22日Java学习日记
    2020年8月21日Java学习日记
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7399613.html
Copyright © 2011-2022 走看看