Bandit算法
该算法是为了解决MAB问题(多臂赌博机问题)
问题原形是,面对多个一样的老虎机,每个老虎机吐钱几率不一样。要怎么样选择才能达到利益最大化。
这里会有一个EE问题,即Exploitation-Exploration(E&E)我们如何在利益和探索之间均衡。我们已经有几台的吐钱率高,我们是选择只在这几台操作,还是要继续探索其他可能吐钱率更好的机器。
对于Bantid算法我们的核心思想是,使遗憾度最低。
前者是 最好机器上的获利,后者是所选机器的获利。两者之差就是遗憾度。
我们又可以按照是否利用上下文(商品和用户特征值),分为两类。当然利用上下文的要好很多。
LinUCB
该算法是从不使用上下文的UCB改进而来。
UCB算法,会计算一个得分
+号前面是收益,后面是最大置信上限
ni是一共的尝试次数,n是该商品的尝试次数。
该式子很好的均衡了探索和已知利益。
最后对每个商品的得分排序,选出最该推荐的商品。
由于该算法没有任何的上下文信息,所以雅虎对其进行了修改。
他们假设,我们的上下文与收益是成线性关系
现在我们的任务是学习到这个参数theta,这样对于新来的数据,我们就可以根据数据上下文计算其收益。
我们采用岭回归(L2正则),由于我们的方程只有一个未知量。我们用标准化解法
(一般只用于数据量比较少的时候,不然计算起来很缓慢)
得到theta,这时我们可以把theta表示为
theta = A转置*b b = DTc
于是我们实时计算步骤在此
这就是我们的LinUCB了。
该算法的速度很快是线性的。
不是上面说theta标准化运算数据量大会很慢吗?其实因为我们是实时更新,所以A和b都是每次更新一行,最后运算的不过是b*A
置信上限是什么呢?
程序中的
是置信上限。它是由L2参数theta服从高斯分布得来的。具体过程我也没研究。