推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
来源:互联网 发布:gre数学难吗 知乎 编辑:程序博客网 时间:2024/05/16 14:55
基于内容的推荐系统 (CBRS)
首先介绍一下最简单的一个推荐算法模型CBRS。在这个模型中我们用线性回归的基本思路拟合出每个用户对每个电影的评分向量,预测出用户没有评分的电影并进行推荐。
假设我们有4个Users和5个Movies,有一些用户给电影打了分,有一些没有打。电影的评分是从0-5,没有评分的项在表格中将用?来表示。我们设定每个电影有
接下来引入一些标记:
r(i,j) 表示User i 是否给 Movie j 评过分,有则=1,无则=0
我们对以上特征来构建一个线性回归模型的算法,针对每个用户j都有一个
根据以上我们可以构建出代价函数Cost function J =
根据线性回归模型,我们需要最小化代价函数,并加上正则化项:
其中 i:r(i,j)表示我们只计算那些用户 j 评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘以 1/2m,在这里我们将 m 去掉。并且我们不对方差项
上面的操作都是对单个用户线性回归模型,对于所有用户,我们有:
如果使用梯度下降来求解,根据Cost function代价函数求偏导可以得出θ的更新公式,其中a表示学习速率:
当然此模型可能过于简单,除了每个电影的属性很少,而且人们喜爱一个电影的因素也不只是因为电影的分类,电影的演员,导演,甚至是上映时间都可以成为观众喜爱一部电影的重要因素。
Collaborative Filtering 协同过滤算法
在之前基于内容的推荐系统中,我们必须要有电影的特征向量才能求出每个用户的参数向量,但是这样会带来很大的麻烦,原因是每个人对电影的分类概念都不同,而且需要手动定义每个电影的特征向量将会降低许多效率。
不如我们换个思路,可否通过用户参数向量来拟合出电影的特征向量呢?当然是可以的:
和之前作对比两个最小化代价函数都如此相近,那么将用户参数与电影的向量都作为代价函数J的输入值,再分别对x于θ分别求偏导就可以解决实际应用中用户评分与电影特征向量都不全的问题了。
再对x与θ分别求偏导,并用梯度下降求局部最小值
注:在协同过滤从算法中,我们通常不使用方差项,如果需要的话,算法会自动学得。
协同过滤算法使用步骤如下:
- 初始 x(1),x(2),…,x(
nm ),θ(1),θ(2),…,θ(nu )为一些随机小值- 使用梯度下降算法最小化代价函数
- 在训练完算法后,我们预测
(θ(j))Tx(i) 为用户 j 给电影 i 的评分从而进行推荐
- 均值化处理(Mean Normalization)
现在假设新来了一名用户,她从来没有看过任何电影,我们该如何给该用户推荐电影呢?首先我们可以先得出矩阵Y表示用户与评分:最有一列为该用户的评分Y=⎡⎣⎢⎢⎢⎢⎢⎢55?005?4000?05500?40?????⎤⎦⎥⎥⎥⎥⎥⎥
我们首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:Y=⎡⎣⎢⎢⎢⎢⎢⎢2.52.5?−2.25−1.252.5?2−2.25−1.25−2.5?−22.753.75−2.5−2.5?1.75−1.25?????⎤⎦⎥⎥⎥⎥⎥⎥
然后我们利用这个新的 Y 矩阵来训练算法。如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测(θ(j))T(x(i))+μi 对于新用户,我们的新模型会认为她给每部电影的评分都是该电影的平均分。
Matlab代码参考
cofiCostFunc.m
function [J, grad] = cofiCostFunc(params, Y, R, num_users, num_movies, ... num_features, lambda)% Collaborative filtering cost function% Unfold the U and W matrices from paramsX = reshape(params(1:num_movies*num_features), num_movies, num_features);Theta = reshape(params(num_movies*num_features+1:end), ... num_users, num_features);J = 0;X_grad = zeros(size(X));Theta_grad = zeros(size(Theta));M=(X*Theta'-Y).^2;J=1/2*sum(sum(R.*M));J=J+lambda/2*sum(sum(Theta.^2))+lambda/2*sum(sum(X.^2));for k=1:num_features for i=1:num_movies for j=1:num_users X_grad(i,k)=X_grad(i,k)+(X(i,:)*Theta(j,:)'-Y(i,j))*Theta(j,k).*R(i,j); end endendX_grad=X_grad+lambda*X;for k=1:num_features for j=1:num_users for i=1:num_movies Theta_grad(j,k)=Theta_grad(j,k)+(X(i,:)*Theta(j,:)'-Y(i,j))*X(i,k).*R(i,j); end endendTheta_grad=Theta_grad+lambda*Theta;grad = [X_grad(:); Theta_grad(:)];end
- 推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
- 推荐系统:协同过滤 之 Item-based Collaborative Filtering
- 推荐系统:协同过滤 之 Item-based Collaborative Filtering
- 推荐系统----Collaborative Filtering
- Collaborative Filtering协同过滤推荐算法
- [推荐系统]COLLABORATIVE FILTERING 学习总结
- [推荐系统]Collaborative filtering 学习总结
- 推荐系统介绍:(协同过滤)—Intro to Recommender Systems: Collaborative Filtering
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于协同过滤的推荐系统
- android 重命名文件
- mysql忘记root密码
- ORF-出站路由过滤
- 同一个表中的数据怎么进行比较
- 重学数据结构 顺序表的添加 删除 算法2.4和2.5
- 推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
- CCF认证题——俄罗斯方块
- hashmap排序
- 费纳姆密码-二进制密码
- 【eclipse】eclipse属性配置(背景色字体等)文件的导入导出方法
- 16元日薪,从阿里云雇佣一个专家阿里云中小企业AI产品码栈解析
- Linux下的网络访问与权限
- 30分钟了解Enterprise Architect
- 容器技术与虚拟化技术理解