机器学习(六)

推荐系统

它是机器学习中的一个重要的应用。
特征对机器学习来说是非常重要的,你所选择的特征对学习算法的性能有很大的影响。机器学习领域有一个很伟大的想法,对于某些问题,有一些算法可以自动地学习一系列合适的特征,所以比起手动设计或编写特征,这也是目前我们做得最多的事。这里有一些环境,能让你开发某个算法来学习使用哪些特征。
推荐系统就是那些环境中的一个例子,通过推荐系统我们能够领略一小部分特征学习的思想。

  • 以电影评分系统为例,假设你有一个网站或者公司出售或者出租电影和其他东西的,像亚马逊,Netfix,还有iTunes。假设你让你的用户评价不同的电影,用1到5星级评分,为了使例子更好理解,我将允许评分可以为0。在这里有5部电影,4个用户,打分如下图所示。
    1
    接下来我将用 n u n_u nu表示用户的数量,这个例子中 n u = 4 n_u=4 nu=4 ,下标u表示具体那么用户, n m n_m nm表示电影的数量,这里 n m = 5 n_m=5 nm=5 ,对于这个例子,比如说我有3部爱情片,2部动作片,观察例子后发现Alice和Bob给这些浪漫的喜剧或爱的电影很高的评价,给了动作片很低的评价,而对于Carol和Dave正好相反,他们比较喜欢动作片,并给了它们较高的星级,当然它们不喜欢爱情片。
    当r( i, j )=1时,代表用户j给电影i进行了评价,用户仅仅评价了部分电影,即使有一些电影我们没有获得该用户的评价。当用户对电影进行评价后,我们会得到一个值y ( i, j ),它表示用户j对电影i所给出的评分,因此y(i, j)是用0到5的数字表示的,而具体的数值取决于用户对电影进行的0到5评级,因此推荐系统的问题是,给出了r( i , j )和y(i , j)数据,然后去查找那些没有被评级的电影,并试图预测这些电影的评价星级,在这个特殊的例子中只有较少的电影以及少量用户数量。因此大多数用户都对大多数电影进行了评价,但在现实情况中,每个用户可能仅评价你所有电影中的一小部分,观察这些数据,如果Alice和Bob都喜欢爱情片,我们就可以假设Alice会给电影3评价5星,Bob或许会给电影2评价4.5星或者是更高的星级,并且我们认为Carol和Dave可能给爱情片非常低的评价,如果Dave真的喜欢动作片,那么他可能给电影5评价4星或5星。
    因此如果我们想开发一个推荐系统,那我们的工作是想出一个学习算法,一个能自动为我们填补这些缺失值的算法,这样就可以看一下该用户还有哪些电影没看过,并推荐新电影给该用户,你可以去预测什么是用户会感兴趣的内容,这是推荐系统问题的主要形式。

基于内容的推荐算法

接上例,怎样才能预测这些未知量的值呢?

  • 假设对于每一部电影,我都有一个对应的特征集,特别地,我们假设每一个电影都有两个特征,我用 x 1 x_1 x1 x 2 x_2 x2来表示,其中 x 1 x_1 x1来衡量一部电影为爱情片的程度, x 2 x_2 x2来衡量一部电影为动作片的程度,下图为例。
    在这里插入图片描述
    和往常一样,我们再加一个额外特征,称为截距特征 x 0 x_0 x0,它的值是1,然后把这些整理在一起,然后我有一个特征量 x ( 1 ) x^{(1)} x(1),上标是1表示它是电影1的特征向量,这个特征向量的第一个元素是1。我们用n来表示特征数量(不包括 x 0 x_0 x0),这里我们有两个特征向量 x 1 , x 2 x_1,x_2 x1,x2来表示每部电影里的爱情程度和动作程度。现在为了作出预测我们可以这没做,我们可以把每个用户的评价预测值看做是一个线性回归问题,特别规定对于每一个用户j,我们要学习参数向量 θ ( j ) \theta^{(j)} θ(j),它是个3维向量,通常来说, θ ( j ) \theta^{(j)} θ(j)是n+1维的,其中n是特征的数量,然后我们要预测用户j评价电影i的值,也就是参数向量 θ \theta θ与特征向量 x ( i ) x^{(i)} x(i)的内积 ( θ ( j ) ) T x ( i ) (\theta ^{(j)})^Tx^{(i)} (θ(j))Tx(i),比如说用户1,也就是Alice,与Alice相关的是某个参数向量 θ ( 1 ) \theta^{(1)} θ(1),第二个用户Bob就和另一个参数向量 θ ( 2 ) \theta^{(2)} θ(2)相关…假如我们想预测Alice对电影3的评价,那么那部电影就会有某个参数向量
    x ( 3 ) = [ 1 0.99 0 ] x^{(3)} = \begin{bmatrix} {1} \\ {0.99}\\ {0} \end{bmatrix} x(3)= 10.990
    假设我们用某种方式得到了Alice的 参数向量 θ ( 1 ) \theta^{(1)} θ(1)
    θ ( 1 ) = [ 0 5 0 ] \theta^{(1)} = \begin{bmatrix} {0} \\ {5}\\ {0} \end{bmatrix} θ(1)= 050
    所以我们对这项的预测就会是 ( θ ( 1 ) ) T x ( 3 ) (\theta^{(1)})^T x^{(3)} (θ(1))Tx(3),值为4.95。我们对每一个用户应用了一个不同的线性回归的副本,假如说Alice有参数向量 θ ( 1 ) \theta^{(1)} θ(1),我们用它来预测她的评价,并表示成一个方程,表示电影包含爱情和动作的程度。并且这四个用户都有一个不同的线性方程,来表示电影包含爱情成分的程度和包含动作成分的程度。这就是我们预测评价的方法。
    我们用 m ( j ) m^{(j)} m(j)来表示评价了电影j的用户数量。
  • 学习参数向量 θ ( j ) \theta^{(j)} θ(j)是一个基本的线性回归问题,我们需要最小化参数向量 θ ( j ) \theta^{(j)} θ(j)
    1 2 m ( j ) ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 m ( j ) ∑ k = 1 n ( θ k ( j ) ) 2 \frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta{(j)})^T(x^{(i)})-y^{(i,j)})^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^n(\theta_k^{(j)})^2 2m(j)1i:r(i,j)=1((θ(j))T(x(i))y(i,j))2+2m(j)λk=1n(θk(j))2
    最后一项正则化项可加可不加,通常我们不会对偏置单元正则化,可以为简化而去掉m,此时并不影响结果。
    1

如果使用梯度下降法,最小化代价函数j如图所示。
2

  • 如果你有所有电影评分的集合,即 σ ( i , j ) \sigma^{(i,j)} σ(i,j) y ( i , j ) y^{(i,j)} y(i,j),如果你有这些评分数据,可以根据不同电影的特征,我们可以学习参数 θ \theta θ

协同过滤

协同过滤算法指的是,当你执行算法时要观察大量的用户,观察这些用户的实际行为,来协同地得到更佳的。
它有一种很有意思的特性,叫做特征学习。这种算法能够自行学习所要使用的特征。

  • 假设我们的用户告诉了我们偏好,而我们想学习电影i的特征向量 x ( i ) x^{(i)} x(i)
    3
  • 如果你的用户愿意为你提供参数 θ \theta θ,你就能估计出各种电影的特征值。
  • 注意:这个推荐系统问题仅建立在每位用户都对数个电影进行了评价,并且每部电影都被数位用户评价过的情况下。这样你才能重复迭代过程,估计出 θ \theta θ x x x

结合以上两种

下面给出结合上面两种优化函数后得到的式子。
新式子作为一个既关于 x x x也关于 θ \theta θ的函数,这和前面的算法之间唯一不同的是不需要反复计算。
4

  • 给出 x x x θ \theta θ的式子中的平方误差项的求和是所有用户j的总和和所有被该用户评分过的电影的总和,这其实是把所有(i,j)对全加起来,每项对应被某一用户评分过的某一电影。关于j的求和意思是,对每个用户对该用户评分的所有电影求和 。

  • 给出 θ \theta θ x x x的式子中则是进行相反的运算,它表示对于每部电影i,将所有对它评分过的用户j求和,这两个求和运算都是对所有r(i,j)=1的(i,j)对求和。就是对所有有评分的用户-电影对进行求和。

  • 总结如下:

    1. 首先我们将会把 x x x θ \theta θ初始为小的随机值,这有点像神经网络训练,我们也是将所有神经网络的参数用小的随机数值来初始化
    2. 接下来我们要使用梯度下降或者其他的高级优化算法把这个代价函数最小化。
    3. 最后给你一个用户,如果这个用户具有一些参数 θ \theta θ,以及给你一部电影,带有已知的特征 x x x。我们可以预测该用户给这部电影的评分为 θ T x \theta^Tx θTx

协同过滤算法的向量化实现及应用

Step1:得出矩阵Y
5
Step2:用户j对电影i的评分预测由公式 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)给出,因此如果你有一个预测评分的矩阵,你所拥有的就是下面的这个矩阵。
6
矩阵元素的标号为i,j。这对应了我们预测的用户j给电影i的打分,这与 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)的值相等。因此这个矩阵中第一个元素,即第一行第一列的元素,是用户一对电影一的评分预测;第一行第二列的元素,是用户二对电影一的评分预测。
Step3:给定这个预测评分矩阵,则有一个比较简单或者向量化的方法来写出它们。比如说,如果我定义矩阵X,则其可以写成像之前讲过的线性回归的矩阵形式。第一行是 ( x ( 1 ) ) T (x^{(1)})^T (x(1))T,第二行是 ( x ( 2 ) ) T (x^{(2)})^T (x(2))T,一直到 ( x ( n m ) ) T (x^{(n_m)})^T (x(nm))T。我将提取所有的电影的特征,然后逐行的写入矩阵中。所以如果将每一个电影都看作一个样本,将不同电影的所有属性都按行写入矩阵。
如果我们找到一个矩阵 Θ \Theta Θ,我要做的是取出每个用户参数向量,按行写入,第一行是 ( θ ( 1 ) ) T (\theta^{(1)})^T (θ(1))T,第二行是 ( θ ( 2 ) ) T (\theta^{(2)})^T (θ(2))T,一直到 ( θ ( n u ) ) T (\theta^{(n_u)})^T (θ(nu))T
此时预测矩阵可表示为 X Θ T X\Theta^T XΘT,它就是一个向量化的方法来计算这个矩阵。

这个协同过滤算法也有别的名字,我们现在正在使用的这个算法也叫低秩矩阵分解。

协同算法中的要点

其中包括均值归一化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值