学习笔记-推荐系统(Recommender systems)

推荐系统在现实中的应用很广:购物网站会根据顾客的购物历史给顾客推荐商品;电影网站也会根据你对一些电影的评分为你推荐新的电影。学完这一章后,发现这背后的逻辑还是挺简单的。
学习笔记-推荐系统(Recommender systems)_第1张图片

基本假设:用户对某电影的评分由该电影的内容属性组合(X)和用户对这些内容属性的喜好程度(Theta)所决定。

1. Content based recommendations

所谓Content based,即已知每部电影的内容属性,包括浪漫、暴力、搞笑等;
任务:已知每部电影的内容属性,并且已知用户对一些电影的评分,需要预测用户对其它电影的评分。
学习笔记-推荐系统(Recommender systems)_第2张图片
问题剖析
学习笔记-推荐系统(Recommender systems)_第3张图片
该类任务(Content_based)其实已经演变成预测用户对每一种内容属性的喜好程度(评分由内容属性和喜好程度决定)。
上述问题的求解思路:通过观察用户对某些电影已有的评分值,预测用户对内容属性的喜好程度。
将上述问题公式化如下:
学习笔记-推荐系统(Recommender systems)_第4张图片
该公式的目的:寻找合适的Theta值,使预测评分与实际评分直接的差异最小化。该公式与我们之前学过的线性回归公式十分相像。

2. Collaborative filtering

刚才讨论的Content based recommendations是基于已知电影的内容属性(X)组成的前提;
同样的,如果已知用户对内容属性的喜好,并且已知用户对某些电影的评分,就可以预测用户对新电影的评分。
学习笔记-推荐系统(Recommender systems)_第5张图片
此问题也已演变成,已有用户对某些电影的评分,和用户对内容属性的喜好程度,预测电影的内容属性组合。
学习笔记-推荐系统(Recommender systems)_第6张图片

Collaborative filtering
通过上面的学习,我们发现,如果已知电影的内容属性和评分,就能够预测用户对内容属性的喜好程度;如果已知用户对内容属性的喜好程度和评分,就能够预测电影的内容属性;上述两部可以进入一个相互迭代的循环过程,使得模型的预测性能不断提高。

Collaborative filtering algorithm

协作过滤算法公式:
学习笔记-推荐系统(Recommender systems)_第7张图片
协作过滤算法实现了仅仅已知用户对某些电影的评分,可以同时预测电影的内容属性和用户对这些内容属性的喜好程度,也就是实现了预测用户的新电影的评分。
学习笔记-推荐系统(Recommender systems)_第8张图片
具体过程:
1. 初始化X和Theta值;
2. 采用梯度下降算法最小化损失函数;
3. 根据Theta和X预测评分。

在应用推荐系统前,需要对每部电影的评分进行均值标准化。
学习笔记-推荐系统(Recommender systems)_第9张图片

作业代码:
体验:作业的前半部分,很容易就实现了。但是在Collaborative filtering gradient那一块卡了我好长时间,为此我还把整章的视频全都重新认真地学了一遍,然而实现了之后发现还是挺简单的。

损失函数的公式如下:

J =0.5 * sum(sum(((X*Theta' - Y).^2).*R)) + 0.5*lambda*sum(sum(Theta.^2)) + 0.5*lambda*sum(sum(X.^2));

X的导数公式(矩阵化):

X_grad= ((X*Theta' - Y).*R) * Theta + lambda*X;

X的导数公式(非矩阵形式):

for i = 1:size(X,1)
  idx = find(R(i, :)==1);
  Theta_temp=Theta(idx,:);
  Y_temp=Y(i,idx);
  X_grad(i, :)=(X(i,:)*Theta_temp' -Y_temp)*Theta_temp +lambda*X(i,:);
end

Theta的导数(矩阵化):

Theta_grad=((X*Theta' -Y).*R)'*X +lambda*Theta;

Theta的导数(非矩阵形式):

for j = 1:size(Theta,1)
  idx= find(R(:,j)==1);
  X_temp=X(idx,:);
  Y_temp=Y(idx,j);
  Theta_grad(j,:)=(X_temp*Theta(j,:)' -Y_temp)'*X_temp + lambda*Theta(j,:);
end

for循环理解:(之前死活无法理解Theta的for循环怎么构成)对于每一位用户;找到该用户评分的电影(idx);获取这些评分电影的内容属性;获取这些评分电影的评分值;该用户的对内容属性喜好的梯度:内容属性乘以属性喜好的转置减去实际评分,上部结构的转置再乘以内容属性。

注:如无特殊说明,以上所有图片均截选自吴恩达在Coursera开设的机器学习课程的课件ppt.

你可能感兴趣的:(coursera机器学习笔记,coursera机器学习笔记)