常用采样方法

常用采样方法

最近在学习 MCMC,一种特殊的采样方法,顺便把其他常用的方法了解了一下。

为什么要采样?

很多问题,我们只需要使用数学解析的方法即可解决。例如对 f(x)做积分,如果 f(x) = x^2,那么直接积分就行,很简单。

若f(x)是标准正态分布的概率密度函数(pdf),求[a,b]之间的定积分,那么直接用数学解析方法就搞不定了,因为我们知道正态分布的积分是不可求的。既然无法用解析方法计算精确值,那么退而求其次,不妨寻找一种可以求得近似值的方法。例如:

f(x) = f(x) * g(x) * 1/g(x) = g(x) * (f(x) * 1/g(x))。这里我们找到一个容易采样的 pdf g(x),并对其采样得到{X1…Xn}。连续函数的积分就可以转化为离散值的求和。这被称为蒙特卡洛积分。

从上面例子可以看到,采样方法可以对诸如积分这种无法用解析方法求解的方法进行近似求解。接下来就是问题的核心:怎样采样?

简单采样方法

最简单的抽样是均匀采样,也就是均匀产生[0,1]之间的随机数,编程语言中一般使用 rand()函数。之所以说是均匀采样,是因为这些样本服从均匀分布。随机数的产生,在计算机中一般通过线性同余的方法实现。

另外,一些简单的分布,如正态分布,也可以在均匀采样的基础上实现采样。

对于其他函数我们就无能为力了,只能通过一些高级点的方式进行采样。

接受-拒绝采样

我们需要对一个分布π(x)进行采样,但是却很难直接进行采样,所以我们想通过另外一个容易采样的分布q(x)的样本,用某种机制去除掉一些样本,从而使得剩下的样本就是来自与所求分布f(x)的样本。

条件:

  • 对q(x)采样比较容易
  • q(x)的轮廓接近π(x),且有 π(x)≤Mq(x),∀x

过程:

  • 产生样本X~q(x),和U~Uniform[0,1]
  • Y=U*Mq(x),若Y≤π(X),则接受X,否则拒绝。

解释:

  • 根据 q(x)采样 X,得到 Mq(X),在[0,1]之间产生随机数U,也就是在[0,Mq(X)]产生随机数Y=U*Mq(x)。如果Y 在π(x)曲线下方,那么就选择接受,否则拒绝。为什么呢?在上图两个曲线相隔越远的地方,随机Y在π(x)下方的概率越小,即接受这个采样X的概率越小。这是合理的,这时候两个曲线间隔远, Mq(x)的采样X不能直接用于π(X)。反之,如果两个曲线相隔近,那么U越可能在π(X)下方,越可能接受这个采样,既然曲线相隔近,那么对Mq(x)的采样就可以近似对π(X)的采样了嘛!

但是拒绝采样效率会比较低,因为有很多采样都拒绝了嘛!

重要性采样

如图,如果我们想求积分,也就是面积,且 f(x)不能求积分形式,一种方法就是在[a,b]间均匀采样N 个点,并用 f(Xi)乘以(b-a)/N 即宽度,累加求和就能得到近似的积分值。这里我们用的权重是相同的:(b-a)/N,就是说每个小矩形的宽度都是相等的。

但很多时候,曲线比较高的地方需要多采样并精确刻画,曲线低的地方可以少采样,这样能减小最后结果与真实值之间的误差。如下图:

我们采用与 f(x)类似的 g(x)来采样,g(x)如图中右上角所示。此时宽度怎么确定呢?宽度就是1/g(Xi),这就能体现出不同点的权重不同了。

MCMC采样

上述都是独立性采样,采样的效率还不高。MCMC 是一种关联采样,当前采样有赖于前一个采样结果。MCMC 的全程是马尔可夫蒙特卡罗。马尔可夫,是说前后两个采样结果的关联性。蒙特卡罗是一种随机模拟方法,用采样的方法解决解析问题,如前面提到的蒙特卡洛积分。

若想对π(x)进行采样,首先构建一个马尔可夫链,该马尔可夫链的状态转移矩阵满足特定条件时,会存在一个稳定状态,稳定分布就是π(x)。根据某定律,我们从某个状态出发,在马尔可夫链每步得到的分布中采样,得到 M 个样本,这些样本就近似服从π(x)。要想构建符合条件的状态转移矩阵并抽样,有两种方法:Metropolis-Hastings 算法和Gibbs Sampling方法。具体介绍可参考文末给出的链接。

参考:

http://www.wuhaijia.com/wordpress/%E6%8E%A5%E5%8F%97-%E6%8B%92%E7%BB%9D%E9%87%87%E6%A0%B7%EF%BC%88acceptance-rejection-sampling%EF%BC%89/

http://blog.sina.com.cn/s/blog_4e5740460100cw5b.html

http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling2

### 常见的上采样方法及其应用场景 在机器学习和数据分析领域,特别是在处理不平衡数据集时,上采样是一种常见的技术。以下是几种常用的上采样方法以及它们的应用场景。 #### 1. 随机过采样 (Random Over-Sampling) 随机过采样是最简单的上采样方法之一,它通过重复少数类样本直到达到所需的平衡比例来增加少数类的数量。这种方法简单易行,但在某些情况下可能导致模型过度拟合,因为相同的样本被多次使用[^5]。 ```python from imblearn.over_sampling import RandomOverSampler ros = RandomOverSampler(random_state=42) X_resampled, y_resampled = ros.fit_resample(X, y) ``` #### 2. 合成少数类过采样技术 (SMOTE) 合成少数类过采样技术(Synthetic Minority Over-sampling Technique, SMOTE)通过在少数类样本附近生成新样本而不是简单复制现有样本来进行上采样。这有助于减少由随机过采样引起的过度拟合风险[^6]。 ```python from imblearn.over_sampling import SMOTE smote = SMOTE(random_state=42) X_smote, y_smote = smote.fit_resample(X, y) ``` #### 3. 边界线SMOTE (Borderline-SMOTE) 边界线SMOTE是对SMOTE的一种改进版本,专注于仅对那些靠近决策边界的少数类实例进行增强。这样可以进一步降低噪声的影响并提高分类性能[^7]。 ```python from imblearn.over_sampling import BorderlineSMOTE bsmote = BorderlineSMOTE(random_state=42) X_bsmote, y_bsmote = bsmote.fit_resample(X, y) ``` #### 4. 自适应合成抽样 (ADASYN) 自适应合成抽样(Adaptive Synthetic Sampling Approach, ADASYN)类似于SMOTE,但它会根据每个少数类样本周围的多数类邻居数量动态调整生成的新样本数。这意味着更难区分的区域会被赋予更多的注意力[^8]。 ```python from imblearn.over_sampling import ADASYN adasyn = ADASYN(random_state=42) X_ada, y_ada = adasyn.fit_resample(X, y) ``` #### 应用场景分析 - **金融欺诈检测**: 使用SMOTE或ADASYN可以帮助识别稀有的欺诈行为模式。 - **医疗诊断**: 对于罕见疾病的数据集,采用适当的方法如边界线SMOTE可能改善预测准确性。 - **客户流失预测**: 当保留客户的成本较高而流失率较低时,合理运用上述任一方法均能有效提升建模效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值