不等概率采样

1.定义
如果总体中每个个体被选入样本的概率是不相等的,则称这种随机抽样的方式为不等概率抽样。
2.优点
这中不等概率抽样能提高抽样精度,减少样本不均衡造成的抽样误差。使用个体之间差异较大的场所。
3.实现
将总体中每个个体赋予不同的权重,权重大的个体被抽到的概率大,权重小的个体被抽到的概率小。
4.有放回抽样
例:
这里写图片描述

4.1 代码法
代码法是最直接的一种方法,也是最容易想到的一种方法,即分别复制增加每种样本的个数,使得每种样本的个数之比,等于入样概率之比。
这里写图片描述
每次抽样前,先在整数1,2,3,…M0里面随机等可能的选取一个整数,设为m ,若代码 m 属于第 j个单元拥有的代码数,则第 j个单元入样。整个过程重复 n次,得到 n个单元入样(当然存在重复的可能性)构成样本。

4.2 Lahiri法
当N非常大时,累积的M0也将很大,给代码法的实施带来很多不方便,Lahiri提出下列方法:
令:
每次抽取1~N中一个随机整数i,及1~M*内一个随机整数m,如果Mi>m,则第i个单元入样;否则按前面步骤重抽。
代码:

unequalProbabilitySampling(vector<int> *mark_samples, vector<float> weights_f)
{
	if(mark_samples->size() != weights_f.size())
	{
		cout << "the length of weights doesnt match samples" <<endl;
		return 0;
	}
	int M0 = 0, M_max = 0;
	vector<int> weights_int;
	for(int i=0; i<weights_f.size(); i++)
	{
		weights_int.push_back(weights_f.at(i) * weights_f.size() * 2);
		M0 = M0 + weights_int.at(i);
	}
	M_max = *max_element(weights_int.begin(), weights_int.end());
	srand((int)time(0));
	for(int i=0; i<weights_int.size(); i++)
	{
		while(1)
		{
			int m = random(M_max);
			int n = random(weights_int.size());
			if( weights_int.at(n) >= m)
			{
				mark_samples->at(n) = mark_samples->at(n) + 1;
				break;
			}
		}
	}
	return 0;
}
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/fe6cfaf1c5a84bcd3829d1619c4c2184.png)

由上数据知,每次采样过程,有一半的概率采样成功,其中3中样本的入样概率之比,等于设定的权重之比。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHAO_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值