美文网首页机器学习
Thompson抽样算法-Python

Thompson抽样算法-Python

作者: 灵妍 | 来源:发表于2018-04-18 20:57 被阅读16次

楔子:
伯努利试验:
就是一次实验只有两种可能的结果
n次伯努利试验:
一次实验只有两种可能的结果,并且每次的实验之间相互独立
二项分布:
就是n次伯努利实验所遵守的分布,并且每次实验成功的概率是已知的
beta分布:
n次伯努利试验,但是每次实验成功的概率是未知的,我们得到的分布就是该事件成功的概率的可能性分布,可以说是概率的概率分布,其中第一个参数代表先验中成功的次数,第二个参数代表先验中失败的次数。
beta分布和二项分布都具有共轭性。


Thompson抽样算法.PNG 贝叶斯推理.PNG

这里我们可以看出对于广告的投放每次只有两种结果,并且每次投放的结果是相互独立的,投放的成功率也是未知的,遵循beta分布。
我们随机在beta分布中抽取的随机数代表广告成功的概率,选取最大的,在一定程度上就代表每次抽取成功概率最大的那个广告。

1、数据预处理

代码:

import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Ads_CTR_Optimisation.csv')
2、初始化

代码:

import random
N = 10000
d = 10
ads_selected = []
numbers_of_rewards_1 = [0] * d
numbers_of_rewards_0 = [0] * d
total_reward = 0
3、做出选择

代码:

for n in range(0, N):
    ad = 0
    max_random = 0
    for i in range(0, d):
        random_beta = random.betavariate(numbers_of_rewards_1[i] + 1, numbers_of_rewards_0[i] + 1)
        if random_beta > max_random:
            max_random = random_beta
            ad = i
    ads_selected.append(ad)
    reward = dataset.values[n, ad]
    if reward == 1:
        numbers_of_rewards_1[ad] = numbers_of_rewards_1[ad] + 1
    else:
        numbers_of_rewards_0[ad] = numbers_of_rewards_0[ad] + 1
    total_reward = total_reward + reward
4、可视化

代码:

# 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()
5、运行结果
点击次数.PNG 很快找到最佳广告.PNG

我们可以看出Thompson抽样算法的效果比UCB算法的效果更好,它们俩的区别仅在于选取下一次抽样对象的方法不同,一个是基于以前的实验结果计算出上界,一个是基于beta分布随机抽取最可能被点击的广告。

相关文章

  • Thompson抽样算法-Python

    楔子:伯努利试验:就是一次实验只有两种可能的结果n次伯努利试验:一次实验只有两种可能的结果,并且每次的实验之间相互...

  • Thompson抽样算法原理

    1、回顾多臂老虎机 在多臂老虎机中,我们通过探索加利用的方法,预测多臂老虎机的奖励分布。 我们将生活中的问题转化成...

  • Thompson抽样算法-R

    楔子: 1、数据预处理 代码: 2、数据初始化 代码: 3、ThompsonSampling 代码: 4、数据可视...

  • 机器学习A-Z~Thompson抽样算法

    本文继续讲一个强化学习的算法,叫做Thompson抽样算法。这个算法的数学理论基础要用到的是贝叶斯推断(Bayes...

  • 分层抽样

    这篇帖子中实现了常见集中抽样方法:【机器学习算法-python实现】采样算法的简单实现 但没有是实现 分层抽样。今...

  • 蓄水池抽样算法(Reservoir Sampling)

    蓄水池抽样算法(Reservoir Sampling) 许多年以后,当听说蓄水池抽样算法时,邱simple将会想起...

  • 借鉴水塘抽样算法的一种解决思想

    1背景 关于水塘抽样的算法原理此处不再说明了, 本文重点是针对它的一种应用场景, 具体算法原理可参考水塘抽样算法原...

  • 推荐系统遇上深度学习(十三)--linUCB方法浅析及实现

    上一篇中介绍了Bandit算法,并介绍了几种简单的实现,如 Epsilon-Greedy算法,Thompson s...

  • 水库抽样

    水库抽样算法是一个典型的空间亚线性算法。 在很多时候我们要在海量数据中进行均匀的抽样,由于我们要取样的是海量数据,...

  • 2021-02-01 蓄水池抽样算法(Reservoir Sam

    蓄水池抽样算法(Reservoir Sampling)[https://www.jianshu.com/p/7a9...

网友评论

    本文标题:Thompson抽样算法-Python

    本文链接:https://www.haomeiwen.com/subject/ohmbkftx.html