✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。
📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记,方便大家参考学习。
💡专栏地址:https://blog.csdn.net/Newin2020/article/details/128125806
📝视频地址:吴恩达机器学习系列课程
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
十四、推荐系统
1. 问题规划
现在各大公司都需要抓住用户的爱好给用户推荐他们想要的信息,以获取关注度,所以接下来就引出了我们的推荐系统,我们先来看个例子关于预测电影评分的,首先先来了解一下参数含义:
- nu代表用户的数量,nm代表电影的数量。
- r(i,j)代表第j个用户是否对第i部电影进行了评价,如果r等于1,说明进行了评价。
- y(i,j)代表第j个用户对于第i部电影的评分,只有当r(i,j)等于1时,y(i,j)才有数值。
所以我们可以通过一系列的数据,去了解用户的电影喜欢类型,从而预测他们对一些没评分电影的评分。
2. 基于内容的推荐算法
现在,我们来介绍一种算法,叫做基于内容的推荐算法,下面是一个例子。
例子还是和上节课的一样,现在我们引出两个特征分别代表爱情和动作的程度,然后再加入一个截止特征,将他们组合成一个x(i)向量代表每一部电影的特征量,而每个用户都会对应一个θ,这如何得到我们后面会讲,总之如果想预测用户对于某部电影的评分的话,可以看做是一次线性问题,只需将x于θ的转置相乘做一次内积便能得到最终结果。接下来,我们来看看其中的具体步骤。
这里要注意的是m(j)代表评价一部电影的用户数量,而我们可以通过上面的值得到代价函数,我们来整合一下。
我们可以将单个θ的代价函数再通过累加变成多个参数合成的代价函数,接下来再来做一个总结。
上面还提到了如何拟合θ参数,这里与线性回归问题十分相似,因为这个算法本质上也是线性回归。
3. 协同过滤
这节课再来讲一个关于如何构建推荐系统的算法,叫做协同过滤,它可以自动学习所需要的特征,通俗来讲就是这个算法通过观察用户的行为来得到特征,所以这里的协同有每个用户都在帮助这个算法进行学习的意思。
还是来看同一个例子,只不过这里我们不知道特征是什么,但是我们可以通过询问用户对爱情电影和动作电影的喜爱程度即θ来推断出x是什么,如下面所示。
我们可以通过给定的θ,从而最小化上面的代价函数得知x是什么。你现在可能会将这节课的内容和上节课的内容混淆,所以我们现在这里总结一下。
上节课我们是通过给定x得到θ,而这节课我们是通过给定θ得到x,其实这两者并不冲突,我们可以通过反复进行这两个算法,从θ得到x再从x得到θ这样反复进行,我们最终会得到一个非常适合的特征和θ值。
然而这样做的效率并不高,如果能够同时得到θ和x就再好不过了。
我们把上面用到的两个式子结合起来,就得到了最终的代价函数。我们上面的第一个代价函数前面其实就是对第j个用户的所有评分过的电影求和,而第二个代价函数前面其实就是对第i个电影被所有评分过它的用户求和,而将这两者结合起来就能得到最终的代价函数,可以同时得到x和θ值。所以,总结起来如下:
- 我们首先对于x和θ初始化为小的随机值。
- 然后最小化代价函数,可以利用梯度下降算法或其它高级算法,得到x和θ值。
- 最后通过得到的x和θ去预测用户对于电影的评分,即将θ得转置与x做内积。
4. 矢量化:低秩矩阵分解
我们接下来要解决的问题是,如果给定一个商品,我们能否够通过这个商品去联想到其它相关的商品,所以我们希望可以通过另一种方法来写出协同过滤算法。
还是同一个例子,只不过现在我们将所有的评分y提取出来变成一个矩阵Y来表示,然后按下面展开。
我们可以将矩阵中展开的值进行进一步提取,提取出X和θ两个向量,这样就可以通过XθT来表示Y了,这里的协同过滤我们还可以称为低秩矩阵分解(low rank matrix factorization)。
所以,我们就可以利用每个电影所学习到的特征,来寻找相似的电影。
我们可以计算电影j的x和电影i的x的差值,从而判断两者的相似度。
5. 实施细节:均值规范化
接下来,我将介绍这章的最后一个细节均值规范化,它可以使算法运行的更好。
这里我们引入一个新的用户,他对所有电影都没有进行评分,所以如果我们尝试获得他的θ的话,只有正则化的一项会决定θ的值,并且最终结果会为0,这样就导致对所有的电影预测他给的评分都会为0,而均值规范化会解决这个问题。
我们还是将所有的y放入一个矩阵Y中,然后计算每一行的平均值从而得到向量μ,再将Y减去μ从而得到Y中每一行的均值都为0的情况,然后再对这个Y进行协同滤波,学习得到θ和x,再去预测结果。
这里要注意的时,我们在预测时还要加会我们刚刚减掉的μ,所以即使我最终得到的θ还是0,我们θ的转置与x的内积还是0,但是加上一个μ最终结果就不为0,而是为该电影所有评分的均值,这对于新用户一无所知的情况还是有意义的。