推荐系统
第一百三十三课:问题规划
推荐系统
1.机器学习中的一个重要应用
2.机器学习中的一些伟大的想法(算法自动的学习一系列合适的特征)
推荐系统的组成:
如果我们想开发一个推荐系统,我们的工作就是想出一个学习算法,一个能自动为我们填补这些缺失值的算法
第一百三十四课:基于内容的推荐算法
第一种建立推荐系统的方法:基于内容的推荐算法
每部电影就可以用一个特征向量来表示,额外添加一个截距特征x0就得到x(1),x(2),x(3)...
我们接下来可以把每个用户的评价预测值看作是一个线性回归问题。我们要预测用户j评价电影i的值,也就是向量θ和特征量x^(i)的内积。对每一个用户应用一个不同的线性回归副本,这就是我们预测评价的方法。
更正式的说:
我们用m^(j)表示评价了电影j的用户数量。
通过这个机器学习系统,如果把参数θ(j)最小化,就可以得到一个相当好的对参数向量θ(j)的估计值。用来对用户j对电影评价做预测。
对所有用户的θ(j)进行求和,并且最小化这个总体优化目标函数,将得到每个用户的参数向量,就可以用这个来对所有用户进行预测。
梯度下降:
现在你应该对如何将变量应用到线性回归中,来预测不同用户对不同电影的评级。这个特殊的算法叫做基于内容的推荐算法,我们假设变量是已有的,即不同电影的各个特征,即我们有描述电影内容的特征量。同时我们用这些描述电影内容的特征量在做出预测。
但是对于很多电影,我们没有特征量?或者很难获取所有电影的此类特征,所以不是基于内容的推荐系统?
第一百三十五课:协同过滤
协同过滤(自行学习所要使用的特征)
θ(j)向我们指明了它们对不同题材电影的喜欢程度,如果我们能从用户那里得到这些参数θ的值,我们理论上就能推导出电影的x1,x2...的值。
加入我们的用户告诉了我们他们的喜好,已经给我们提供了θ(1)到θ(nu)的值,而我们想要学习电影i的特征向量x^(i),我们需要做的是提出下面的优化问题:
总结一下:
1.如果你有所有电影评分的集合,你有这些评分数据,于是根据不同电影的特征,我们可以学习参数θ,如果你已知这些特征,就能学习不同用户的参数θ。
2.如果你的用户愿意给你提供这些参数,你就能估计出各个电影的特征值
迭代-收敛-得到一组合理的电影特征以及一组合理的对不同用户参数的估计
这个推荐系统建立在每位用户都对数个电影进行了评价,并且每部电影都被数位用户评价过的情况下。你才能重复迭代计算θ和x。
基本的协同过滤思想:
当你执行算法时,要观察大量的用户,观察这些用户的实际行为,来协同得到更佳的每个人对电影的评分值。用户在帮助算法计算电影的特征值,这个特征又可以用来预测其他用户的评分。
协同!
第一百三十六课:协同过滤算法
假如你有了电影的特征,就可以得到用户参数θ
如果你有了参数θ,就可以估计特征x
反复迭代...
不停地计算θ和x
...
但实际上有一个更有效率的算法可以把x和θ同时计算出来(结合两个函数):
这个优化目标是将关于x和θ的两个代价函数结合起来,为了提出一个综合的优化目标问题,我们把这个目标函数视为特征x和用户参数θ的函数,对它整体最小化,作为一个既关于x也关于θ的函数。就不需要反复计算了,可以将x和θ同时最小化。
协同过滤算法:
第一百三十七课:矢量化:低秩矩阵分解
协同过滤算法的向量化实现?推荐类似商品给用户?
预测评分矩阵,有一个比较简单的或者向量化的方法来写出它们:
协同过滤算法别名:低秩矩阵分解
运行了协同过滤算法以后,再讲一个问题:利用已经学习到的属性来找到相关的电影。捕捉到特征中比较重要的方面,这些重要的方面将导致一些用户喜欢另一些电影。
但是特征很难可视化,人们难以理解这些特征的含义。但通常算法会学到一些有意义的特征,它们捕捉到一部电影的最重要的特征,而这些特征导致了你喜欢或者不喜欢这部电影。
向量化的实现来计算所有用户对所有电影的评分预测值,也可以实现利用已经学到的特征来找到彼此相似的电影或商品。
第一百三十八课:实施细节:均值规范化
细节,均值归一化,它有时会让算法工作的更好
Eve没有给出过评分,对她的电影推荐也就没有。解决:
要想使用均值归一化,我要做的就是计算每个电影所得评分的均值,把它们放在一个u的向量内,观察一下这些电影评分,然后减去均分,把电影评分矩阵的每一行都减去那个电影的平均评分。
Eve没有给出过电影评分,但通过均值归一化,她就有了一个默认评分。
总结:均值归一化作为协同过滤算法的预处理步骤,根据不同的数据集,它有时能让你的算法表现得好一些。
网友评论