累计遗憾
∑ i = 1 T ( G o p t ∗ − G i ) \sum_{i=1}^T (G_{opt}^* - G_{i}) i=1∑T(Gopt∗−Gi)
G o p t ∗ G_{opt}^* Gopt∗是最优选择方案的收益 , G i G_{i} Gi是实际采取的选择的收益。
目标是累计遗憾最小 。
Beta分布的PDF概率密度函数为:
1 B ( α , β ) x α − 1 ( 1 − x ) β − 1 \frac{1}{B(\alpha, \beta)}x^{\alpha-1}(1-x)^{\beta-1} B(α,β)1xα−1(1−x)β−1
其中:
B ( α , β ) = Γ ( α + β ) Γ ( α ) Γ ( β ) B(\alpha, \beta)=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)} B(α,β)=Γ(α)Γ(β)Γ(α+β)
则可分为三种情况:
当Beta分布用到推荐系统时, α \alpha α 可表示推荐后用户点击次数, β \beta β可表示推荐后用户未点击次数。每个用户每个商品都要维护各自的 α 和 β \alpha和\beta α和β。
scipy.stats.distributions.beta.ppf(np.random.random(size), pos, neg)
置信区间上界。为每个臂评分,每次选出评分最高的臂输出,然后观察用户反馈,再更新相应的臂的参数。
每个臂的评分为:
X ‾ j ( t ) + 2 l n t T j , t \overline X_j(t) + \sqrt{\frac{2lnt}{T_j,_t}} Xj(t)+Tj,t2lnt
X ‾ j ( t ) \overline X_j(t) Xj(t)是该候选臂到目前为止的平均收益, T j , t T_j,_t Tj,t是该候选臂被选择的次数,t为总的选择次数。
算法思想和汤普森采样一样 :
for arm in range(n_arms):
bonus = math.sqrt((2 * math.log(total_counts)) / float(counts[arm]))
new_rewards[arm] = old_rewards[arm] + bonus
{ 随 机 选 择 一 个 臂 , 以 ϵ 概 率 选 择 最 大 平 均 收 益 的 臂 , 以 1 − ϵ 概 率 \begin{cases} 随机选择一个臂, & 以\epsilon概率 \\[2ex] 选择最大平均收益的臂, & 以1-\epsilon概率 \end{cases} ⎩⎨⎧随机选择一个臂,选择最大平均收益的臂,以ϵ概率以1−ϵ概率
if random.random() > epsilon:
return ind_max(rewards)
else:
return random.randrange(len(rewards))
反馈更新: n e w _ r e w a r d = n − 1 n ∗ o l d _ r e w a r d + 1 n ∗ r e w a r d new\_reward =\frac{n-1}{n}* old\_reward +\frac{1}{n} * reward new_reward=nn−1∗old_reward+n1∗reward