机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)

一个电影推荐系统的例子:

符号定义:

n_{u}: 用户数量

n_{m}: 电影数量

n: 电影特征种类

r(i, j): 用户 j 是否对电影 i 评分(0/1)

y(i, j): 用户 j 对电影 i 的评分,未评分为undefined

\theta^{(j)}: 用 j 对应的参数向量(\theta\in \mathbb{R}^{n+1}, \theta_{0}=0)

x^{(i)}: 电影 i 的特征向量(x_{0}=1)

For user j, movie i, predicted rating: (\theta^{(j)})^{T}(x^{(i)})

m^{(j)}: 用户j评价过的电影数量

学习\theta^{(j)}, 优化目标函数:

机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)_第1张图片

梯度下降更新公式:

机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)_第2张图片

 注:以上是基于内容的推荐算法(因为已经有了电影的特征)。

 协同过滤(callaborative filtering):

Given x^{(1)},...,x^{(n_{m})}(and movie ratings), can estimate \theta^{(1)},...,\theta^{(n_{u})};

Given \theta^{(1)},...,\theta^{(n_{u})}, can estimate x^{(1)},...,x^{(n_{m})};

So, guess x\rightarrow \theta\rightarrow x\rightarrow \theta \rightarrow x... 直到收敛.

与上面谈到的通过x预测theta相反,通过theta预测x的目标函数如下:

j ~= 0的梯度变化如下:

以上是基本的协同过滤算法思想,下面介绍优化过的协同过滤算法:

总结一下上面推论的协同过滤算法优化目标函数:

机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)_第3张图片

将上面两个式子结合为一个:

算法步骤:

注:为什么要执行这一步:

机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)_第4张图片

注:上面第一个式子括号内容其实是代价函数对x求导,第二个是代价函数对theta求导。

注意上面式子k是从1开始的,因为没有了x0和theta0,认为它们都是属于\mathbb{R}^{n}的。

如何进行推荐:

How to find a movie j related to movie i ?

Find the movie j with the smallest \left \| x^{(i)}-x^{(j)} \right \|.

对用户评分进行平均归一化(Mean Normalization):

如果一个用户从来没有评价过电影,那么推荐算法最终得到的theta将都会是0,也就表示,这个用户不喜欢任何电影,这是不对的。所以要对用户的评分进行平均归一化:

机器学习学习笔记(十四)—— 推荐系统(recommender systems)/协同过滤算法(callaborative filtering)_第5张图片

Y是用户j(列)对i(行)电影的评分,定义mu是平均评分(分母不包括未评分的),使Y=Y-mu.

For user j, on movie i predict: (\theta ^{(j)})^{T}(x^{(i)})+\mu_{i}

这样,如果算法计算出用户未评分为0的话,就会是一个平均情况。

 

 

 

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