1. 从物理意义出发的观点
什么是推荐系统?以电影推荐为例,就是对于一部电影,我们预测某个用户对一部电影的评分。
我们用如上所示符号来表示。值得注意的是,很有可能用户没有给某电影打分,此时 r(i,j)=0 。
这里需要理清:
对于一个电影,我们需要找到一些特征空间
X
来衡量这个电影;
对于一个用户,我们需要找到一些参数
然而问题是:我们既没有
X
也没有对于用户i的
使用如下符号:
我们假定对于电影的特征向量已经确定,也即所有的
x(i)
已知,来学习
θ(j)
:
现在反过头来看,其实我们对电影的特征向量一无所知。如果假定所有的
θ(j)
已知,来学习
x(i)
:
这一个过程与K-Means训练过程类似,给定一个初始的θ,然后开始训练:
这里又与K-Means有所不同,因为K-Means是combination-number最优化问题;而我们这里的最优化问题很简单,可以同时进行:
此时我们再来重新看给出的y数据:
还是有点小问题,如果某一个用户没有给任何电影打分:
根据我们的学习过程:代价函数的第一项为0。如果要最小化代价函数,那么此用户的
θ=0
,也就是说:对于任何的电影,我们将会预测其评分为0——不向该用户推荐任何电影。这样做可以吗?可以,但不是很好。我们理应向任何一个用户推荐电影。怎么推荐?
如果大多数人认为这个电影很好,那么这个电影可能真的非常好。——将对某一电影的所有评分求一个均值。
可以使用如下的均值归一化过程:
用 Y−μ 来学习,最后预测的结果是 θTx+μ 。
2. 从抽象计算出发的观点
对于电影推荐系统,我们获得的数据是什么呢?假设用 nu 个用户, nm 部电影, r(i,j) 表示用户j是否给用户i评分,其对应的分数是 y(i,j) 。那么我们的资料是 (x(j)=j,y=y(i,j)) 亦或者是 (x(j)=j,y=(y(1,j)),...,?,...y(nm,j))T) 。(毕竟我们的推荐系统以用户为中心,而不是以电影为中心——当然以电影为中心,数据也也可以用同样的方式解析)。
我们知道输入x代表的是用户的ID,并没有实际意义,我们称之为抽象特征。
我们要设计一个特征转换的函数φ,来将抽象特征转换——这个函数具体是什么我们不关心(这类似于自动编码器)。然后学习一个预测函数h,使得
h(ϕ(x))≈y
。
自动编码器使用一个线性模型,假设预测函数也是一个线性模型,那么整个模型就是一个两层的网络。
假设将x进行binary vector 编码,那么这个网络就是
nu−d−nm
结构
其中
Vd∗nu,Wnm∗d
,则有
根据代价函数,我们知道我们要寻找W,V使得
然后转向使用alternating optimization技术来解决最优化问题。
3. 小结
无论如何,电影的特征向量的长度还是需要我们自己来指定。
我们在训练过程中,可以考虑实际问题来定制解决方案,例如此问题中:越是最近时间段的数据,权重越大。