1.简单随机抽样
简单随机抽样是按等概率原则直接从总体数据中抽取n个样本,这种抽样的基本前提是所有样本个体都是等概率分布的,该方法适用于个体分布均匀的场景。相关代码如下:
import numpy as np
import random
data=np.loadtxt('F:\小橙书\chapter3\data3.txt')
data_sample=random.sample(data.tolist(),2000) #随机抽取2000个样本
print(data_sample[:2])
print(len(data_sample))
--------------------------------代码分割线---------------------------------
[[-5.956653651808556, -9.19046708610147, 7.581677464579395, 2.448127763635072, 3.261916790574865], [-8.316236971238956, 8.651459867023007, 6.214170630622256, -5.37816928485395, -5.48723560171476]]
2000
2.等距抽样
等距抽样是先将总体中的每个个体按顺序编号,然后计算出抽样间隔,再按照固定抽样间隔抽取个体。该方法适用于个体分布均匀或呈现明显的均匀分布规律,无明显趋势或周期性的规律的数据。
import numpy as np
import random
data=np.loadtxt('F:\小橙书\chapter3\data3.txt')
sample_count=2000 #指定抽样数量
record_count=data.shape[0] #获取最大样本量
width=int(record_count/sample_count) #计算样本区间
data_sample=[] #初始化空白列表,用来存储抽样结果数据
i=0
#当样本量小于或等于指定抽样数量且矩阵索引在有效范围内
while len(data_sample)<=sample_count and i*width<=record_count-1:
data_sample.append(data[i*width])
i+=1
print(data_sample[:2])
print(len(data_sample))
---------------------------------代码分割线-----------------------------------
[array([-3.08057779, 8.09020329, 2.02732982, 2.92353937, -6.06318211]), array([-2.11984871, 7.74916701, 5.7318711 , 4.75148273, -5.68598747])]
2000
3.分层抽样
分层抽样是先将所有个体样本按照某种特征划分为几个类别,然后从每个类别中使用随机抽样或等距抽样的方法选择个体组成样本。这种操作方法能明显降低抽样误差,并且便于针对不同类别的数据样本进行单独研究。该方法适用于带有分类逻辑的属性、标签等特征的数据。
import numpy as np
import random
data2=np.loadtxt('F:\小橙书\chapter3\data2.txt')
each_sample_count=200 #定义每个分层的抽样数量
label_data_unique=np.unique(data2[:,-1]) #定义分层值域
sample_list=[] #定义空列表,用来存放临时分层数据
sample_data=[] #定义空列表,用来存放最终抽样数据
sample_dict={} #定义空字典,用来显示各分层样本数量
for label_data in label_data_unique:
for data_tmp in data2:
if data_tmp[-1]==label_data:
sample_list.append(data_tmp)
each_sample_data=random.sample(sample_list,each_sample_count) #对每层数据随机抽样
sample_data.extend(each_sample_data) #将抽样数据追加到总体样本表
sample_dict[label_data]=len(each_sample_data) #样本统计结果
print(sample_dict)
----------------------------------代码分割段--------------------------------------
{0.0: 200, 1.0: 200}
4.整群抽样
整群抽样是先将所有样本按照某种特征划分为几个小群体,然后随机抽样几个小群体集来代表总体。这种方法跟之前3种方法的差异点在于该方法抽取的是小群体集,不是每个数据个体本身。这种方法适用于小群体集的特征差异比较小,并且对划分小群体集有更高要求。
import numpy as np
import random
data3=np.loadtxt('F:\小橙书\chapter3\data4.txt')
label_data_unique=np.unique(data3[:,-1])
print(label_data_unique)
sample_label=random.sample(label_data_unique.tolist(),2)
sample_data=[]
for each_label in sample_label:
for data_tmp in data3:
if data_tmp[-1]==each_label:
sample_data.append(data_tmp)
print(sample_label)
print(len(sample_data))
---------------------------------代码分割线-----------------------------------
[0. 1. 2. 3.]
[2.0, 0.0]
498