概述
汤普森采样算法
原理
- 假设每个臂是否产生收益,决定于背后的一个概率分布,及产生收益的概率为p,每个臂对应的概率分布得出各自的随机数,最大的就是收益最高的
- 根据每次收益情况调整对应的概率分布
核心 (Beta)贝塔分布
贝塔分布: 是一种连续性概率密度分布,由形状参数(a,b)表示,一般用于伯努利事件成功概率的概率分布,定义域在(0,1)之间
伯努利试验:在同样的条件下重复地、相互独立地进行的一种随机试验 并且只有两种可能结果:发生或者不发生
分布特点:
对于不同的形状参数 a,b
- 分布很宽 a+b 很大
- 分布很窄 接近1 -> a/(a+b) 很大
- 分布很窄 接近0 -> a/(a+b) 很小
在推荐场景 a为候选项点击或购买次数 b为没有点击或购买的次数 用于解决推荐的冷启动和探索问题
python 实现
import pandas as pd
dataset=pd.read_excel("Ads_CTR_Optimisation.xlsx")
dataset.head()
import random
N = dataset.shape[0] # 用户点击次数
d = 10 # 10个广告
ads_selected = [] # 广告选择
numbers_of_rewards_1 = [[0] * d for _ in range(len(uid))] # 广告i奖励1的总和 a
numbers_of_rewards_0 = [[0] * d for _ in range(len(uid))] # 广告i奖励0的总和 b
print(numbers_of_rewards_0)
total_reward = 0 # 总奖励
for ui in uid: # 每个用户循环
print(ui)
this_dataset = dataset.query("Uid=={}".format(str(ui)))
print(this_dataset.shape[0])
u_ctr = u_count[ui]
print(u_ctr)
N = u_ctr
for n in range(0, N): # 每个点击事件循环
ad = 0
max_random = 0
for i in range(0, d): # 第i个广告
random_beta = random.betavariate(numbers_of_rewards_1[ui-1][i] + 1, numbers_of_rewards_0[ui-1][i] + 1) # beta分布
if random_beta > max_random: # 寻找最大随机量,最大随机量对应的广告为我们选择投放的广告
max_random = random_beta
ad = i
ads_selected.append(ad)
reward = this_dataset.values[n, ad] # 获得奖励
if reward == 1:
numbers_of_rewards_1[ui-1][ad] += 1
else:
numbers_of_rewards_0[ui-1][ad] += 1
total_reward = total_reward + reward
print(numbers_of_rewards_1[ui-1])
最后
以上就是拼搏小懒猪为你收集整理的MAB多臂赌博机---汤普森采样算法汤普森采样算法的全部内容,希望文章能够帮你解决MAB多臂赌博机---汤普森采样算法汤普森采样算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复