Machine Learning A-Z学习笔记16-Thompson抽样算法

1.简单原理

本文继续讲一个强化学习的算法,叫做Thompson抽样算法。这个算法的数学理论基础要用到的是贝叶斯推断(Bayesian Inference)。我们先谈谈这个算法的基本原理,同样以多臂老虎机为例

抽样算法的计算流程

如图所示,横轴代表奖励,越往右边表示奖励越多。三条竖线代表三个不同的老虎机它们的平均奖励。

在算法开始前,我们是什么都不知道的,因此需要得到一些基础数据。图中有四个蓝色的数据,表示按下蓝色老虎机得到的奖励,根据这几个得到的奖励,可以得到一个数学分布。同样绿色的老虎机也能得到一个分布,黄色同理。

这三个分布预测的是这三个机器给我们带来奖励实际上可能的数学期望的概率分布。接下来基于这三个随机分布,我们得到几个随机抽样,选择获得最大抽样值的机器按下去。但由于是随机的,虽然黄色的实际期望是最高的,但我们依然可能会选出一个绿色大于黄色数据结果。

按下去后我们会得到一个新的观察到的奖励值,得到新的奖励值后就要调整绿色机器的分布。


显然这个绿色的分布变得更高更窄了,后面的步骤和这里其实是一样的,也是依然选择奖励值最高的机器按下去,通过得到的结果继续调整分布。

当这个游戏进行到很多步骤之后,这些分布都会变得非常窄,尤其是黄色的基本会和实际期望吻合.

这时由于我们一直选择奖励值最高的机器,因此按下黄色的概率会比较高,导致黄色的会越来越窄,而蓝色的很少玩到,因此相对要宽一点。

Thompson抽样算法 vs. 置信区间上界算法

我们使用Thompson抽样算法和ucb算法都处理了多臂老虎机问题,那么现在来比较下两个算法。来看看这两个算法的基本原理图。

首先这个UCB算法,它是一个确定性算法,当我们得到相同的奖励时,我们作出的决策时确定,因此我们每一轮的总收益和总收益都是确定的。每一轮中作出的决策只和置信区间的上界有关,而这个上界只和这个机器所有的观察值有关。所以说当所有机器的观察值相同时,我们永远会做相同的决策。对于Thompson算法,它是个随机性算法,它的某一步或者某几步是在一个随机函数控制下,跟运气是有关系的。它依赖于一些随机事件,就像我们上面选择点的时候,虽然黄色的实际期望大于绿色,但我们还是可能会选出绿色大于黄色的数据点。因此说它是个随机性的算法。

那么对于UCB,它还有个特点,就是需要实时更新上界,这个在之前的文章描述UCB算法原理的时候可以看出来。对于Thompson抽样算法,它是允许延迟更新甚至批量更新的,比如我们往网上投放一批广告,这里是允许它得到的结果是有延迟的。最后一点,在近些年的实际应用和研究中发现,Thompson抽样算法相对于置信区间算法,它是有更好的实际应用效果的。

2.相关代码

# Thompson Sampling# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# Importing the dataset
dataset = pd.read_csv('Ads_CTR_Optimisation.csv')# Implementing Thompson Sampling
import random
N = 10000
d = 10
ads_selected = []
numbers_of_rewards_1 = [0] * d
numbers_of_rewards_0 = [0] * d
total_reward = 0
for n in range(0, N):ad = 0max_random = 0for i in range(0, d):# 生成本回合广告i的概率(藉由累积被点阅数、累积不被点阅数,并基于贝叶斯推断)random_beta = random.betavariate(numbers_of_rewards_1[i] + 1, numbers_of_rewards_0[i] + 1)# 若广告i概率为本回合最高,则为被选择推播if random_beta > max_random:max_random = random_betaad = i# Log纪录ads_selected.append(ad)# 确认客户点阅结果reward = dataset.values[n, ad]# 若点阅结果为1,则更新广告i的累积被点阅数if reward == 1:numbers_of_rewards_1[ad] = numbers_of_rewards_1[ad] + 1# 若点阅结果为1,则更新广告i的累积不被点阅数else:numbers_of_rewards_0[ad] = numbers_of_rewards_0[ad] + 1#更新总奖励数total_reward = total_reward + reward# Visualising the results - Histogram
plt.hist(ads_selected)
plt.title('Histogram of ads selections')
plt.xlabel('Ads')
plt.ylabel('Number of times each ad was selected')
plt.show()

Machine Learning A-Z学习笔记16-Thompson抽样算法相关推荐

  1. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)

    作者:林夕 本文长度为2900字,建议阅读9分钟 本文为大家介绍图网络的基本概念.网络的应用以及图的结构. 标签:机器学习 目录 一.Why Networks 二.网络的应用     2.1 应用领域 ...

  2. 决策树(chap3)Machine Learning In Action学习笔记

    优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型(必须离散化)和标称型. 决策树创建分支的伪代码函数crea ...

  3. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第二讲)

    作者:于媛,十三鸣 本文长度为3300字,建议阅读10+分钟 本文为大家介绍常用的网络属性和经典的网络模型. 标签:机器学习 [ 导读 ]在研究网络的时候,我们往往需要从结构层面对网络进行分析,网络属 ...

  4. 台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

    台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

  5. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  6. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  7. 机器学习(Machine Learning)——深度学习(Deep Learning)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/abcjennifer/article/ ...

  8. cocos2d-x学习笔记16:记录存储1:CCUserDefault

    cocos2d-x学习笔记16:记录存储1:CCUserDefault 一.简述 CCUserDefalt作为NSUserDefalt类的cocos2d-x实现版本,承担了cocos2d-x引擎的记录 ...

  9. Deep learning with Python 学习笔记(9)

    神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...

  10. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

最新文章

  1. Keras卷积+池化层学习
  2. PyQt5 简易计算器
  3. 《Web安全之机器学习入门》一 2.2 TensorFlow简介与环境搭建
  4. 廉洁修身论文2000字_自主招生论文发表要求【期刊论文】自主招生论文发表要求...
  5. 【随感】看老科和当当的回眸相视
  6. MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
  7. NC88-寻找第K大的数
  8. DNS-实验6_queryperf和dnstop的简单使用
  9. mysql-odbc的zip安装方法_win10环境下mysql-odbc的zip安装方法
  10. LeetCode 405. 数字转换为十六进制数
  11. 用perl语言求1到100之间的偶数,奇数及素数
  12. java pdf转base64_后台返回pdf的base64编码到前端,如果pdf中有中文,不会显示问题?...
  13. 一点感想及AIX如何快速入门到精通(转)
  14. 横空出世,比Visio快10倍的画图工具来了
  15. 手机屏幕什么计算机,手机屏幕和电脑屏幕的区别
  16. php网站后台修改主页,织梦网站后台主页页面修改
  17. 悲!企业软件被360误认木马病毒!
  18. 【2014-3】day3 T1 五彩斑斓
  19. win7计算机图标排列,win7文件夹内图标取消自动排列,取消自动排列
  20. 51nod-生产口罩(拓补排序+DP)by zyz

热门文章

  1. IE7绿色版下载-转载
  2. 技术牛人---章文嵩博士---做系统要先了解业务的需求
  3. Unity3D学习日记2
  4. 22_多点电容触摸屏驱动
  5. Lua_第28章 资源管理(下)
  6. 请写出至少五个块级元素_以下属于行内块元素的是()
  7. Apache Rewrite 详解 RewriteBase
  8. php rewrite 规则,apache服务器开启rewrite后的写法和规则
  9. 百度C++研发工程师面试题(最新整理)
  10. 大学计算机excel高级筛选,excel高级筛选的使用方法(入门 进阶 高级)