CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现

贝叶斯平滑及其精确解 贝叶斯平滑及其精确解贝叶斯平滑方程贝叶斯最优平滑方程Rauch-Tung-Striebel 平滑器RTS平滑器 平滑与滤波的区别在于:滤波只是用当前以及之前的量测量去估计当前状态(也可能是未来)的估计值。而贝叶斯平滑在进行估计时还用到了当前时刻之后的量测量。使得估计更加的准确。 贝叶斯平滑方程 贝叶斯平滑的目的在于获得截止到T\bm{T}T时刻的量测量后,计算k\bm{k}k时刻状态xk\bm{x_k}xk​的边缘后验分布,如下:(其中 k<T\bm{k<T}k<T)。 p(xk∣y1:T 阅读详情

1. 前言

前面博客介绍了CTR预估中的贝叶斯平滑方法的原理http://www.cnblogs.com/bentuwuying/p/6389222.html。

这篇博客主要是介绍如何对贝叶斯平滑的参数进行估计,以及具体的代码实现。

首先,我们回顾一下前文中介绍的似然函数,也就是我们需要进行最大化的目标函数:

下面我们就基于这个目标函数介绍怎样估计参数。

 

2. 参数估计的几种方法

1. 矩估计

矩估计在这里有点乱入的意思:),因为它其实不是用来最大化似然函数的,而是直接进行参数的近似估计。

矩估计的方法要追溯到19世纪的Karl Pearson,是基于一种简单的 “替换” 思想建立起来的一种估计方法。 其基本思想是用样本矩估计总体矩. 由大数定理,如果未知参数和总体的某个(些)矩有关系,我们可以很自然地来构造未知参数的估计。具体计算步骤如下:

1)根据给出的概率密度函数,计算总体的原点矩(如果只有一个参数只要计算一阶原点矩,如果有两个参数要计算一阶和二阶)。由于有参数这里得到的都是带有参数的式子。比如,有两个参数时,需要先计算出:期望  ; 方差  。在Beta分布中,可以计算得到,E(x) = α / (α+β),D(x) = αβ / (α+β)2(α+β+1)。

2)根据给出的样本,按照计算样本的原点矩。通常它的均值mean用  表示,方差var用  表示。(另外提一句,求时,通常用n-1为底。这样是想让结果跟接近总体的方差,又称为无偏估计)

3)让总体的原点矩与样本的原点矩相等,解出参数。所得结果即为参数的矩估计值。这里有,mean = E(x) = α / (α+β),var = D(x) = αβ / (α+β)2(α+β+1)。于是乎,我们可以求得α,β:

α = [mean*(1-mean)/var - 1] * mean

β = [mean*(1-mean)/var - 1] * (1-mean)

 

2. Fixed-point iteration

首先构造出似然函数,然后利用Fixed-point iteration来求得似然函数的最大值。

1)首先给出参数的一个初始值(通常可以使用矩估计得到的结果作为初始值)。

2)在初始值处,构造似然函数的一个紧的下界函数。这个下界函数可以求得其最大值处的闭式解,将此解作为新的估计用于下一次迭代中。

3)不断重复上述(2)的步骤,直至收敛。此时便可到达似然函数的stationary point。如果似然函数是convex的,那么此时就是唯一的最优解。

其实Fixed-point iteration的思想与EM类似。

首先给出两个不等式关系:

1)

2)

由此可以得到对数似然函数的一个下界:

 

想要得到此下界函数的最大值,可以分别对α,β求偏导,并令之等于零,此时便得到α和β各自的迭代公式:

 由此,每次迭代,参数都会达到此次下界函数的最大值处,同时也就使得对应的似然函数值也相应地不断增大,直至收敛到似然函数的最大值处。

 

3. EM

通过将概率参数作为隐含变量,任何估计概率参数的算法都可以使用EM进一步变成估计个数参数的算法。

(1)E-step:计算出隐含变量p在已观测数据(观测到的每个类别发生的次数,以及每个类别的超参数值的上一轮迭代的取值)下的后验分布,便可以得到完全数据的对数似然函数的期望值。

(2)M-step:对E-step中的期望值求最大值,便可得到相应的超参数的本轮迭代的更新值。

(3)不断重复地运行E-step和M-step,直至收敛。

回来我们这里的问题上,在有了观测到的每个类别发生的次数,以及每个类别的超参数值的上一轮迭代的取值后,隐含变量p的后验分布为:

而此时的完全数据的对数似然函数的期望为:

其中,

于是乎,我们可以对完全数据的对数似然函数的期望求最大值,从而得到α,β的更新值,有很多方法,直接求偏导,梯度下降,牛顿法等。

但是呢,此时我们并不需要非常精确地求得它的最大值,而是仅仅用牛顿法迭代一次。相比于精确地求得最大值,这种方法在每次迭代时只有一半的计算量,但是迭代次数会超过两倍。

牛顿法的迭代可见:

 

3. 代码实现

复制代码
 1 #!/usr/bin/python
 2 # coding=utf-8
 3 
 4 import numpy
 5 import random
 6 import scipy.special as special
 7 import math
 8 from math import log
 9 
10 
11 class HyperParam(object):
12     def __init__(self, alpha, beta):
13         self.alpha = alpha
14         self.beta = beta
15 
16     def sample_from_beta(self, alpha, beta, num, imp_upperbound):
17         sample = numpy.random.beta(alpha, beta, num)
18         I = []
19         C = []
20         for click_ratio in sample:
21             imp = random.random() * imp_upperbound
22             #imp = imp_upperbound
23             click = imp * click_ratio
24             I.append(imp)
25             C.append(click)
26         return I, C
27 
28     def update_from_data_by_FPI(self, tries, success, iter_num, epsilon):
29         '''estimate alpha, beta using fixed point iteration'''
30         for i in range(iter_num):
31             new_alpha, new_beta = self.__fixed_point_iteration(tries, success, self.alpha, self.beta)
32             if abs(new_alpha-self.alpha)<epsilon and abs(new_beta-self.beta)<epsilon:
33                 break
34             self.alpha = new_alpha
35             self.beta = new_beta
36 
37     def __fixed_point_iteration(self, tries, success, alpha, beta):
38         '''fixed point iteration'''
39         sumfenzialpha = 0.0
40         sumfenzibeta = 0.0
41         sumfenmu = 0.0
42         for i in range(len(tries)):
43             sumfenzialpha += (special.digamma(success[i]+alpha) - special.digamma(alpha))
44             sumfenzibeta += (special.digamma(tries[i]-success[i]+beta) - special.digamma(beta))
45             sumfenmu += (special.digamma(tries[i]+alpha+beta) - special.digamma(alpha+beta))
46 
47         return alpha*(sumfenzialpha/sumfenmu), beta*(sumfenzibeta/sumfenmu)
48 
49     def update_from_data_by_moment(self, tries, success):
50         '''estimate alpha, beta using moment estimation'''
51         mean, var = self.__compute_moment(tries, success)
52         #print 'mean and variance: ', mean, var
53         #self.alpha = mean*(mean*(1-mean)/(var+0.000001)-1)
54         self.alpha = (mean+0.000001) * ((mean+0.000001) * (1.000001 - mean) / (var+0.000001) - 1)
55         #self.beta = (1-mean)*(mean*(1-mean)/(var+0.000001)-1)
56         self.beta = (1.000001 - mean) * ((mean+0.000001) * (1.000001 - mean) / (var+0.000001) - 1)
57 
58     def __compute_moment(self, tries, success):
59         '''moment estimation'''
60         ctr_list = []
61         var = 0.0
62         for i in range(len(tries)):
63             ctr_list.append(float(success[i])/tries[i])
64         mean = sum(ctr_list)/len(ctr_list)
65         for ctr in ctr_list:
66             var += pow(ctr-mean, 2)
67 
68         return mean, var/(len(ctr_list)-1)
69 
70 
71 
72 def test():
73     hyper = HyperParam(1, 1)
74     #--------sample training data--------
75     I, C = hyper.sample_from_beta(10, 1000, 10000, 1000)
76     print I, C
77 
78     #--------estimate parameter using fixed-point iteration--------
79     hyper.update_from_data_by_FPI(I, C, 1000, 0.00000001)
80     print hyper.alpha, hyper.beta
81 
82     #--------estimate parameter using moment estimation--------
83     hyper.update_from_data_by_moment(I, C)
84     print hyper.alpha, hyper.beta
复制代码

 

4. 参考文献

1. Click-Through Rate Estimation for Rare Events in Online Advertising

2. Estimating a Dirichlet distribution

 

版权声明:

   本文由笨兔勿应所有,发布于http://www.cnblogs.com/bentuwuying。如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。

 

贝叶斯滤波和贝叶斯平滑(Kalman滤波,RTS平滑) 贝叶斯滤波和贝叶斯平滑(Kalman滤波,RTS平滑),卡尔曼滤波,平滑 阅读详情

相关推荐

广告点击率的贝叶斯平滑

广告点击率的贝叶斯平滑 一.点击率的贝叶斯平滑 预估互联网广告的点击率一个重要的技术手段是logistic regression模型,这个模型非常依赖特征的设计。每个广告的反馈ctr作为特征能极大地提升预估的准确性,所以每个广告的反馈ctr非常重要。 目前用得比较多的获取反馈ctr的方式是直接计算每个广告的历史ctr,这样的问题就是当该广告投放量比较少的时候(如新广告),历史ct

mytestmy的专栏 4万+

标签权重的计算方法之贝叶斯平滑

我们需要计算对数似然函数的一阶导数和二阶导数,用于牛顿法迭代更新参数。# 计算一阶导数# 计算二阶导数贝叶斯平滑通过 Beta 分布进行平滑估计,是处理稀疏标签数据的一种有效方法。我们通过定义对数似然函数、使用牛顿法迭代优化参数 α 和 β,最终得到平滑后的标签权重,从而提高模型的稳定性。

goTsHgo的博客 2322

在STM32上运行小波变换及神经网络算法——(一)单片机中小波算法编写

在单片机上实现离散小波变换的C代码,通过确定信号长度、小波分解层数、小波基名称后进行编写,并改写成了方便调用的结构体格式。

weixin_45400202的博客 986

CTR预估中的贝叶斯平滑方法(一)原理及实验介绍

1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad) 竞价模式: 对于在线广告,主要有以下几种竞价模式: 1)pay-per-impression(按展示付费):广告商按照广告被展示的次数付费,这是一种最普遍的竞价模型。缺点在于没有考...

weixin_30879169的博客 1029

深入探讨 VQ-VAE:理解变分量化自动编码器

VQ-VAE代表"Variational Quantized Variational Autoencoder",是一种生成模型,通常用于处理高维数据,如图像和音频。它的设计灵感来自于变分自动编码器(VAE)和量化方法,结合了它们的优点,使得 VQ-VAE 能够生成高质量的数据,并在数据表示上引入离散性。VQ-VAE 是一种强大的生成模型,结合了变分自动编码器和量化方法的优点。它在图像和音频生成、数据压缩和生成性对抗网络等领域具有广泛的应用。

DeepViewInsight的博客 7014

NXP KW45开发实战:如何在MCUXpresso IDE中正确配置J-Link并解决设备识别问题

本文详细介绍了在MCUXpresso IDE中配置J-Link以支持NXP KW45无线MCU开发的实战指南。从环境准备到J-Link深度配置,再到烧录流程优化和高级调试技巧,帮助开发者高效解决设备识别问题并提升开发效率。特别推荐使用JLinkRemoteServer.exe进行多设备并行调试,并提供了烧录速度优化和低功耗调试的实用技巧。

gray5的博客 864

ctr 平滑_CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现

1. 前言这篇博客主要是介绍如何对贝叶斯平滑的参数进行估计,以及具体的代码实现。首先,我们回顾一下前文中介绍的似然函数,也就是我们需要进行最大化的目标函数:下面我们就基于这个目标函数介绍怎样估计参数。2. 参数估计的几种方法1. 矩估计矩估计在这里有点乱入的意思:),因为它其实不是用来最大化似然函数的,而是直接进行参数的近似估计。矩估计的方法要追溯到19世纪的Karl Pearson,是基于一种简...

weixin_29870701的博客 374

高通Sensor Tuning实战:手把手教你用Chromatix生成并打包bin文件(附避坑指南)

本文详细介绍了高通Sensor Tuning的全流程实战,从Chromatix配置到Bin文件加载验证。通过手把手教程,帮助开发者掌握Chromatix工具链的使用,避免常见配置错误,提升调试效率。特别针对kalama等新一代平台,提供经过验证的解决方案和避坑指南。

ios99的博客 482

【实践】CTR预估中的贝叶斯平滑方法(二)

1. 前言 这篇博客主要是介绍如何对贝叶斯平滑的参数进行估计,以及具体的代码实现。 首先,我们回顾一下前文中介绍的似然函数,也就是我们需要进行最大化的目标函数: 下面我们就基于这个目标函数介绍怎样估计参数。   2. 参数估计的几种方法 1. 矩估计 矩估计在这里有点乱入的意思:),因为它其实不是用来最大化似然函数的,而是直接进行参数的近似估计。 矩估计的方法要追溯到19世纪的

一寒惊鸿 1万+

python代码爬取大众点评评论!直接copy就可以运行!

python代码爬取大众点评评论!直接copy就可以运行!

QiuQiRuQin的博客 1万+

555定时器呼吸灯电路制作全攻略:从仿真到实物搭建(附避坑指南)

本文详细介绍了使用555定时器制作呼吸灯电路的完整流程,从基础原理到实物搭建,包括电路设计、元件选择、仿真验证、焊接技巧及调试优化。特别提供了避坑指南,帮助电子爱好者快速掌握这一经典DIY项目,实现美观的呼吸灯效果。

weixin_33734785的博客 402

[笔记]CTR预估中的贝叶斯平滑方法及其代码实现

1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   竞价模式: 对于在线广告,主要有以下几种竞价模式: 1)pay-per-impression(按展示付费):广告商按照广告被展示的次数付费,这是一种最普遍的竞价模型。缺点在于没有考

wwqwkg6e的专栏 3973

Hermes 教程 03:Skills 系统

摘要:Hermes Skills是一种自我改进机制,可将解决问题的经验保存为可复用技能文档。v0.13.0版本遵循agentskills.io开放标准,与Claude Skills互通。技能创建流程包括发现问题、创建技能文件、加载使用和优化更新四个阶段。系统提供技能检索和自维护机制(Curator),支持技能媒体路由和多种管理命令。内置技能涵盖开发调试、创意头脑风暴等场景,通过积累技能使Hermes更适应用户需求。

程序猿_三产 727

[转载] CTR预估中的贝叶斯平滑方法

参考:CTR预估中的贝叶斯平滑方法(一)原理及实验介绍、贝叶斯平滑 文章目录竞价模式:遇到的困难:假设数据的连续性数据层级结构的贝叶斯平滑方法代码实现贝叶斯平滑方法参数估计和代码实现 竞价模式: 对于在线广告,主要有以下几种竞价模式: 1)pay-per-impression(按展示付费):广告商按照广告被展示的次数付费,这是一种最普遍的竞价模型。缺点在于没有考虑投放广告的效果。 2)pay-per-action(按行为付费):只有在广告产生了销售或者类似的一些转化时,广告商才付费。缺点在于追踪用户的交

素质云笔记 1049

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开

摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。

金牌架构师 1069

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ctr 平滑_CTR预估中的贝叶斯平滑方法及其代码实现

我们假设事件的发生并不是相互独立的,相反,在层级结构中相对比较靠近的两个事件的相关性要大于距离较远的两个事件,它们之间拥有很多共通之处。于是,我们便可以利用“相似”事件的信息来丰富某个我们感兴趣的事件(这个事件本事的发生的次数比较少)。具体到我们现有的场景下,可以利用与我们需要预估的事件(比如query-ad pair,或者page-ad pair)的“相似”事件的信息来帮助我们来做出预估计算。假...

weixin_42442651的博客 432

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ctr 平滑_机器不学习:CTR预估中的贝叶斯平滑方法

机器不学习 www.jqbxx.com : 深度聚合机器学习、深度学习算法及技术实战1. 背景介绍广告形式:互联网广告可以分为以下三种:1)展示广告(display ad)2)搜索广告(sponsored search ad)3)上下文广告(contextual ad)竞价模式:对于在线广告,主要有以下几种竞价模式:1)pay-per-impression(按展示付费):广告商按照广告被展示的次数...

weixin_32059007的博客 184

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

转化率预估中的贝叶斯平滑

干货分享1. 问题描述在做比赛的过程中,我们发现了有转化率这个指标在大量数据下是有效的。理想情况下,例如某个广告点击量是10000次,转化量是100次,那转化率就是1%。但有时,例如某个广...

abcdefg90876的博客 1461

点击率预估方法总结

点击率预估方法总结 点击率预估方法总结 前言: 最近一直在做帖子维度的CTR预估,尝试了好些方法,把一些经过和想法记录下来。C表示点击数,I表示展示数,p表示CTR 1. 普通方法 p=C/I 直接使用帖子的点击数除以曝光数,存在的问题很明显: 1. 可能有的帖子曝光数很少,甚至为 0,...

AcceptedLin的博客 4万+

ctr预估 php,CTR预估之贝叶斯平滑

在实际工作中,我们发现了有转化率这个指标在大量数据下是有效的。理想情况下,例如某个广告点击量是10000次,转化量是100次,那转化率就是1%。但有时,例如某个广告点击量是2次,转化量是1次,这样算来转化率为50%。但此时这个指标在数学上是无效的。因为大数定律告诉我们,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。后者点击量只有2次,不满足“重复试验多次”的条件。那么如何解决这个...

weixin_39541189的博客 437
上一篇: One-Hot Encoding
下一篇: 【吴恩达深度学习】1. 神经网络和深度学习
洞之蝉
博客等级 码龄16年 237粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值