吴恩达机器学习笔记——十六、推荐系统
1 符号定义
nu:用户数量。n1表示第一个用户
nm:测评的产品数量
r(i, j):判断第j个用户是否对第i个产品进行了打分。r(i, j)=0或1
y(i,j):用户j对第i个电影的评分(只有r(i, j)=1时才有这一项)
n:测评的产品的特征数量
m(j):用户j测评的产品数量
2 基于内容的推荐算法
2.1 模型准备
本节一4个用户(nu=4)对5部电影(nm=5)打分为例介绍算法。x1和x2是一部电影的两个特征值,x1表示该电影的爱情成分所占比例,x2表示该电影的动作成分所占比例。x(1):第一个产品的特征向量,其中包括一恒等于1的x0截距项。
对于每一个用户j,我们要学习到一组权重θ(j),用表达式(θ(j))Tx(i)预测用户j对第i部电影的评分。本质上是对每个用户都进行一次线性回归
2.2 求解θ(j)的方法
最优化目标函数:
依旧可以使用梯度下降算法:式子形式与线性回归算法是统一的。
3 协同过滤算法
协同过滤算法具有特征学习的功能,其可以自行学习所要使用的特征 。
协同过滤算法又称为低秩矩阵分解
我们去完整看一部电影并给其爱情程度和动作程度打分是一件很费时间的事情,所以引入特征学习这一理论,当我们知道客户对每个电影(产品)的打分和偏爱程度向量θ(j)时,可以通过下面的式子求出特征向量:
这样其实就变成了先有鸡θ还是先有蛋x的问题了,我们往往随便取一些θ的值,用θ求x,再用求得的x反求θ,这样循环往复迭代,这样可以收敛到一组合理的电影特征。
但其实有更成熟的算法,可以不用迭代而同时求出x和θ。
3.1 同时求出x和θ
我们要定义新的代价函数,并使用梯度下降最小化该代价函数:
这里我们学习到的x是n维向量,即不包含x0=1的截距项(与之前的协同过滤不同,之前求出的x是n+1为向量)。
以下是协同过滤算法的三个步骤,最终目标是使用学习到的x和θ对产品进行打分,以预测该用户对某产品的喜爱程度有几分,来给他精准推荐广告。
将上式向量化表示:Y= X·ΘT
- 如果||x(i)-x(j)||的值很小,那么说明产品j和产品i很相似,可以一起推荐给一类人群。
4 均值归一化
均值归一化算法用在某一用户没有给任何一个产品打分的情况。
- 抛开没有进行任何打分的用户数据,对每部电影的平均得分求一个平均值,将平均值储存在向量μ中。
- 对每个电影的得分减去平均值μ。
- 使用新的Y矩阵学习x和θ,然后对于矩阵中的问号值,就等于:(θ(j))Tx(i) + μi
不过因为第五个用户没有进行任何打分,我们学习到的θ(5)其实还是等于[0, 0]T,这就说明第五位用户对每部电影的打分都是平均值,这个预测的数值仍然是有意义的。