标签:sso 基于 平均值 nbsp 前言 == 距离 net mic
前言
以下内容是个人学习之后的感悟,转载请注明出处~
简介
很多网站都有推荐系统,向我们推荐我们想要地或者有可能需要的信息,那么它是怎么实现的呢?因为它们
都采用了推荐算法,在现今的推荐算法之中,最被大家广泛认可和采用的是协同过滤算法。
协同过滤算法
所谓基于内容的推荐,就是说我们的item具备某些属性attrs,然后我们可以通过某个user的历史评分记录,
计算出该user对各种 属性 attr的喜好程度,从而可以给user推荐具备他喜欢的attr的item。
比如说,每一部电影,都由 浪漫和动作 两种属性,如下图
我们以Alice为例,她对前2个romance风格的电影评分很高,对最后2部 action类型的电影评分为0,那么第3
部电影的属性列表表示该电影时romance风格的,是不是可以预测 Alice对该电影的评分可能比较高呢?!当然!
其实对于 Alice这个用户而言,就是一个我们已经熟知的 linear regression的问题。X是电影的attrs向量,y是用
户的评分。我们要求的theta就是user对各种attrs的偏好。
详见下图公式:
其算法,就是用 梯度下降法,每一步更新 theta即可,见下图,不用多说。
思考一个问题:
item 的内在属性并不是什么时候都可以得到。就算有,按照一般人的思路,可能也得用大量的人力去填,而且还可能不准确。
回顾一下,基于内容的推荐,是已知y和X,求theta。如果我们已知y和theta,就可以求X。
于是,如果给theta一个初始化很小的值,可以来回利用上面两个式子,对X和theta进行求解。
我们伟大的前辈发现了一种更好的方法,就是把两个 linear regression合并,如下图
合并后,我们的最优化目标就从 J(theta) 和 J(X)变成了 J(theta,X)。
算法描述如下:
在这里,我们不需要 k = 0的特殊情况了,因为我们不需要手动添加 x=1这个元素。如果需要x=1,协同过滤算法会自己算出
一个 x=1。算法描述到此为止。
那么,为什么该算法也叫做 矩阵分解算法呢。见下图,我们把 Y矩阵,转换成了 Theta和X两个矩阵的乘积。
那么,怎么找到与 movie i最相似的5个movie呢?
计算距离:
这个距离可能很大。更好的计算距离或者说相似的的方法有 皮尔逊相似度,余弦相似度,欧拉距离相似度等等,这些相似度的
取值范围都在 -1~1之间。
如果一个用户是新来的,没有任何评分记录,怎么给他推荐?
如果一个用户没有评分记录,那么用 CF方法算出来的评分都是0。没什么价值,还不如给他一个平均值。具体实现见下图:
计算出每部电影的评分平均值。然后把所有的评分都减去平均值进行计算。算出来的结果再加上平均值。
以上是全部内容,如果有什么地方不对,请在下面留言,谢谢~
机器学习之协同过滤算法(推荐系统)
标签:sso 基于 平均值 nbsp 前言 == 距离 net mic
原文地址:http://www.cnblogs.com/steed/p/7459304.html