我是靠谱客的博主 拼搏小懒猪,最近开发中收集的这篇文章主要介绍MAB多臂赌博机---汤普森采样算法汤普森采样算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

汤普森采样算法

原理

  1. 假设每个臂是否产生收益,决定于背后的一个概率分布,及产生收益的概率为p,每个臂对应的概率分布得出各自的随机数,最大的就是收益最高的
  2. 根据每次收益情况调整对应的概率分布

核心 (Beta)贝塔分布

贝塔分布: 是一种连续性概率密度分布,由形状参数(a,b)表示,一般用于伯努利事件成功概率的概率分布,定义域在(0,1)之间

伯努利试验:在同样的条件下重复地、相互独立地进行的一种随机试验 并且只有两种可能结果:发生或者不发生

image

分布特点:

对于不同的形状参数 a,b

  1. 分布很宽 a+b 很大
  2. 分布很窄 接近1 -> a/(a+b) 很大
  3. 分布很窄 接近0 -> a/(a+b) 很小

在推荐场景 a为候选项点击或购买次数 b为没有点击或购买的次数 用于解决推荐的冷启动和探索问题

python 实现

import pandas as pd
dataset=pd.read_excel("Ads_CTR_Optimisation.xlsx")
dataset.head()

image

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多臂赌博机---汤普森采样算法汤普森采样算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部