Python 运筹优化13 Thompson Sampling 解读

说明

这部分应该是Multi-Armed Bandit的最后一部分了。

内容

1 On Line Ads

这个实验,最初的目的就是为了选出最佳的广告。首先,通过伯努利分布,模拟了某个广告的有效率。在真实场景里,我们是无法知道那个广告更好的。可能在train阶段,可以获得一些模糊的参考,但是使用强化学习的目的,就是让其随着现实返回进行自发调整。

可以把一个模型,或者一个版本视为一个bandit。强化框架的意义在于最大化的利用已有的一套bandit,在过程中,最优的bandit会自动浮现,从而解开最初建模阶段的一些迷惑。

class BernoulliBandit(object):def __init__(self, p):self.p = pdef display_ad(self):reward = np.random.binomial(n=1, p=self.p)return rewardadA = BernoulliBandit(0.004)
adB = BernoulliBandit(0.016)
adC = BernoulliBandit(0.02)
adD = BernoulliBandit(0.028)
adE = BernoulliBandit(0.031)ads = [adA, adB, adC, adD, adE]

2 强化学习

在之前的样例中,我们已经尝试了A/B/n test 、eps greedy、UCB等三个方法,现在是最后一种方法Thompson Sampling

初始化过程 :

这段代码看起来像是为Multi-Armed Bandit Proble 中的 Thompson Sampling 算法做准备。Thompson Sampling 是一种用于解决探索-利用困境的随机化算法,它基于贝叶斯方法,在每个时间步骤根据先验分布和观察到的奖励来更新每个臂的概率分布。

在 Thompson Sampling 中,每个臂都有一个 Beta 分布,其中 α 参数表示已经获得的奖励次数,β 参数表示已经尝试的次数减去获得奖励的次数。在每个时间步骤,根据每个臂的 Beta 分布随机抽样,选择具有最大样本值的臂作为当前时间步的动作。

n_prod = 100000
n_ads = len(ads)
alphas = np.ones(n_ads)
betas = np.ones(n_ads)
total_reward = 0
avg_rewards = []for i in range(n_prod):theta_samples = [np.random.beta(alphas[k], betas[k]) for k in range(n_ads)]ad_chosen = np.argmax(theta_samples)R = ads[ad_chosen].display_ad()alphas[ad_chosen] += Rbetas[ad_chosen] += 1 - Rtotal_reward += Ravg_reward_so_far = total_reward / (i + 1)avg_rewards.append(avg_reward_so_far)
df_reward_comparison['Thompson Sampling'] = avg_rewards

这段代码做了以下几件事情:

对于每个时间步骤 i,从每个臂的 Beta 分布中采样一个值 theta_samples。
选择具有最大 theta_samples 的臂作为当前时间步骤的动作 ad_chosen。
显示所选择广告,并获取奖励 R。
根据获得的奖励更新所选臂的 Alpha 和 Beta 参数。
计算当前总奖励 total_reward 和平均奖励 avg_reward_so_far。
将平均奖励添加到 avg_rewards 列表中。
将 avg_rewards 列表添加到 DataFrame 中,命名为 ‘Thompson Sampling’。

在这里插入图片描述

3 UCB

这个漏掉了,补一下

分别使用3个参数分别跑

# c = 0.1
# c = 1
c =10
n_prod = 100000
n_ads = len(ads)
ad_indices = np.array(range(n_ads))
Q = np.zeros(n_ads)
N = np.zeros(n_ads)
total_reward = 0
avg_rewards = []for t in range(1, n_prod + 1):if any(N==0):ad_chosen = np.random.choice(ad_indices[N==0])else:uncertainty = np.sqrt(np.log(t) / N)ad_chosen = np.argmax(Q +  c * uncertainty)R = ads[ad_chosen].display_ad()N[ad_chosen] += 1Q[ad_chosen] += (1 / N[ad_chosen]) * (R - Q[ad_chosen])total_reward += Ravg_reward_so_far = total_reward / tavg_rewards.append(avg_reward_so_far)df_reward_comparison['UCB, c={}'.format(c)] = avg_rewards

这段代码实现了上限置信区间(Upper Confidence Bound, UCB)算法。UCB算法通过平衡探索(Exploration)和利用(Exploitation)来选择动作。其中,参数c用于调整探索与利用之间的权衡。

这段代码中,c 参数用于控制探索的程度。较大的 c 值将会更加强调探索,而较小的 c 值则更加强调利用。

这段代码的逻辑如下:

如果有至少一个广告的点击次数为零,则在这些广告中随机选择一个。
否则,计算每个广告的置信区间上界,并选择置信区间上界最大的广告。
显示所选择的广告,并获取奖励。
更新所选广告的点击次数和平均奖励。
计算当前总奖励和平均奖励,将平均奖励添加到列表中。
将平均奖励列表添加到 DataFrame 中,命名为 ‘UCB, c={}’。

在这里插入图片描述

4 Next

Review一下这一章,然后找一个具体的实用样例来进行实测,最后发布为前后端微服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka安装部署

kafka 官网下载: kafka https://downloads.apache.org/kafka/3.7.0/zookeeper https://downloads.apache.org/zookeeper/ run kafkazookeeper,conf目录下创建zoo.cfg,运行bin目录下的zkServer脚本文件 kafka eagle 参考:htt…

java springboot连接sqlserver使用

pom.xml增加sqlserver驱动 <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>9.4.0.jre8</version></dependency>application.yml配置文件 server:port: 9001 #spring: …

sklearn.preprocessing.normalize()

sklearn.preprocessing.normalize()是Scikit-learn库中的一个函数&#xff0c;用于对特征向量进行归一化处理。归一化的目的是将每个样本的特征向量缩放到单位范数&#xff08;即长度为1&#xff09;。 normalize函数的主要参数包括&#xff1a; X&#xff1a;要归一化的数组…

【Vue】vue项目中使用百度地图教程

在Vue项目中显示百度地图&#xff0c;你需要遵循以下步骤&#xff1a; 1. 注册百度开发者账号并获取API密钥2. 在Vue项目中引入百度地图API3.在Vue组件中创建地图容器4. 在Vue组件中初始化地图5. 添加其他地图组件&#xff08;可选&#xff09;6. 处理地图事件&#xff08;可选…

C# 结构体数组内指定字段的升序、降序排列

目录 实现目标 结构体定义 升序排列 方法一&#xff1a;使用Array.Sort配合自定义比较器 方法二&#xff1a;使用LINQ的OrderBy 降序排列 方法一&#xff1a;使用Array.Sort配合自定义比较器 方法二&#xff1a;使用LINQ的OrderBy 实现目标 要对结构体数组按照其成员字…

【Power BI】DAX语言 VS Power Query M语言

DAX&#xff08;Data Analysis Expressions&#xff09;和Power Query M语言是Microsoft Power BI和Excel中的两种强大的数据处理和分析工具。尽管它们在许多方面都有重叠之处&#xff0c;特别是用于数据建模和数据转换&#xff0c;但它们在用途、语法和功能上有显著的区别。本…

CSPM是否可以申请职称?解答来了

在当今项目管理领域&#xff0c;PMP证书与CSPM证书都是备受认可的专业证书。CSPM证书不等于职称&#xff0c;不过CSPM证书有国家标准作为背书&#xff0c;《项目管理专业人员能力评价要求》国家标准可作为各省市区县开展项目管理专业人才引进、培养、职称评定和任用等工作的依据…

嵌入式单片机笔试题

DC-DC 和 LDO两者有何区别&#xff1f; DC-DC转换器&#xff08;直流-直流转换器&#xff09;和LDO&#xff08;低压差线性稳压器&#xff09;都是用于电源管理的设备&#xff0c;但它们在原理和特性上有一些显著的区别&#xff1a; 原理&#xff1a; DC-DC转换器通过改变输…

Linux 第二十七章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

格式化容量或速度

枚举 StorageSpeedUnit enum StorageSpeedUnit{NUMERIC,STORAGE,SPEED; }日志 Loggable public static void logger(String pattern,Object... paramArray) {String cls MethodHandles.lookup().lookupClass().getName();System.Logger logger System.getLogger(cls);Strin…

Python实战开发及案例分析(19)—— 推荐算法

推荐系统是一种信息过滤系统&#xff0c;它的目标是预测用户对物品的偏好程度。在Python中&#xff0c;我们可以使用多种技术来实现推荐算法&#xff0c;包括基于内容的推荐、协同过滤推荐以及利用机器学习模型的混合推荐系统。 基本类型的推荐系统 基于内容的推荐系统&#…

输电线路的覆冰

给出一些输电线路的覆冰类型 输电线路的覆冰类型可以根据其形成机理、条件及性质进行不同的分类。以下是一些主要的覆冰类型&#xff1a; 凝华覆冰&#xff1a;这种覆冰是近地表面空气中的水分因气温过低而直接凝结在输电线路表面的一种霜&#xff0c;也被称为晶状雾凇。云中…

下单制造fpc的工艺参数

FPC工艺简介 - 百度文库 (baidu.com) FPC工艺参数 - 豆丁网 (docin.com) FPC柔性线路板的主要参数.ppt (book118.com) 捷多邦&#xff1a; 华秋&#xff1a; 背胶&#xff1a; FPC板背胶是可以粘接在光滑表面的一种薄型胶带&#xff0c;可以在狭小以及光滑的表面上用来提供高…

互联网医院源码|禾高互联网医院系统功能和优势

互联网医院系统是一种建立在互联网基础上的医疗服务平台&#xff0c;其目标是通过数字化手段改善患者和医生之间的医疗互动。这一系统不仅使患者能够更轻松地获取医疗服务&#xff0c;而且也为医生提供了更灵活的工作方式。 1、智能导诊:提供人体模拟图&#xff0c;模拟门诊医生…

【学习笔记】C++每日一记[20240513]

简述静态全局变量的概念 在全局变量前加上static关键字&#xff0c;就定义了一个静态全局变量。通常情况下&#xff0c;静态全局变量的声明和定义放在源文件中&#xff0c;并且不能使用extern关键字将静态全局变量导出&#xff0c;因此静态全局变量的**作用于仅限于定义静态全…

振弦式应变计的与实际测量值不一致怎么办

在进行结构健康监测或其他工程测量时&#xff0c;精确性和可靠性至关重要。振弦式表面应变计是一种广泛使用的测量工具&#xff0c;它通过测量材料表面的应变来评估结构的应力状态。然而&#xff0c;在实际应用中&#xff0c;振弦式应变计的测量值与实际应变值之间的不一致问题…

【JavaScript】---- 使用 Tween 实现转盘抽奖

1. 实现效果 2. 需求分析 它和正常的转盘抽奖不一样&#xff0c;一般实现都是指针形式的&#xff0c;转盘转动&#xff0c;最后指针停留在奖品的随机位置&#xff1b;通过上边图发现奖品必须刚好停留在奖品的位置&#xff0c;因为不是指针&#xff0c;所以不能最后落到随机位置…

SqlServer基础学习笔记

SQL Server 是啥&#xff1f; 想象一下你有一本超级智能的电子记事本&#xff0c;里面可以记录各种信息&#xff0c;比如你的好友名单、他们喜欢的颜色、生日等等。这个记事本不仅能记录&#xff0c;还能帮你查找、修改和删除这些信息。SQL Server就像是这样的一个超级记事本&a…

福建聚鼎:做装饰画到底能不能赚钱

在探讨做装饰画能否成为盈利的行当之前&#xff0c;我们必须认识到任何一门艺术或手工的价值并非仅仅取决于其直接的经济收益。艺术创作本身就是一种文化传承和个人情感表达的方式&#xff0c;它对创作者和社会都有着不可估量的精神价值。然而&#xff0c;将话题限定在经济回报…

MySQL入门学习-数据修改.修改

在MySQL中&#xff0c;数据修改包括对表中的数据进行插入、更新和删除操作。这些操作可以通过SQL语句来完成&#xff0c;常用的语句包括INSERT、UPDATE和DELETE。 一、数据修改常用语句的基本操作。 1. 插入数据&#xff1a; - 插入数据可以使用INSERT INTO语句&#xff0c;…