机器学习推荐算法(附例题代码)

Posted 大拨鼠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习推荐算法(附例题代码)相关的知识,希望对你有一定的参考价值。

往期文章
【机器学习】回归分析
【机器学习】Logistic回归
【机器学习】神经网络
【机器学习】支持向量机
【机器学习】主成分分析与聚类分析

文章目录

推荐算法

问题引入

现在有一个预测电影评分的问题,共有5部电影,由4个用户进行评分,评分等级为0~5颗星,其中打?号的表示未看过此电影,不作评价。

先介绍一些符号代表的含义:

n u n_u nu:用户数量。

n m n_m nm:电影数量。

r ( i , j ) r(i,j) r(i,j):如果等于1,这说明用户 j j j已经给电影 i i i评分,等于0则没有。

y ( i , j ) y^(i,j) y(i,j):用户 j j j给电影 i i i的评分,只有当 r ( i , j ) r(i,j) r(i,j)=1时该项才有意义。

推荐系统要做的是根据给出 r ( i , j ) r(i,j) r(i,j) y ( i , j ) y^(i,j) y(i,j)的数据,然后去查找那些没有被评分的电影,并试图预测这些电影的评价星级。

基于内容的推荐算法

还是上面的例子:

我们知道了 n u n_u nu=4, n m n_m nm=5,那么怎样才能预测那些未知的值呢?

现在我们有一个关于电影的特征集,分别是 x 1 x_1 x1 x 2 x_2 x2 x 1 x_1 x1表示该电影为爱情片的程度, x 2 x_2 x2则表示该电影为动作片的程度。

那么每部电影我们都可以得到一个向量 x ( i ) x^(i) x(i)

例如第一步电影的特征可表示为(其中1是偏置项):

x ( 1 ) = [ 1 0.9 0 ] ∈ R n + 1 x^(1)=\\left[ \\beginmatrix 1 \\\\ 0.9 \\\\ 0 \\\\ \\endmatrix \\right] ∈R^n+1 x(1)=10.90Rn+1

那么我们可以把这个问题看成是一个线性回归问题,对于每个用户 j j j,我们都要学习得到一个参数向量 θ ( j ) \\theta^(j) θ(j),然后预测用户 j j j评价电影 i i i的值,也就是 ( θ ( j ) ) T x ( i ) (\\theta^(j))^Tx^(i) (θ(j))Tx(i).

参数的学习也和线性回归问题类似。

单个用户参数学习:

多个用户的参数学习:

梯度下降:

协同过滤

如果每部电影的特征没有给出,也就是说一部电影属于爱情片还是动作片的程度未知。

但是已知每个用户的学习参数:

那么我们同样可以推出电影对应的特征。

例如第一部电影,我们只需满足:

( θ ( 1 ) ) T x ( 1 ) ≈ 5 (\\theta^(1))^Tx^(1)≈5 (θ(1))Tx(1)5

( θ ( 2 ) ) T x ( 2 ) ≈ 5 (\\theta^(2))^Tx^(2)≈5 (θ(2))Tx(2)5

( θ ( 3 ) ) T x ( 3 ) ≈ 0 (\\theta^(3))^Tx^(3)≈0 (θ(3))Tx(3)0

( θ ( 4 ) ) T x ( 4 ) ≈ 0 (\\theta^(4))^Tx^(4)≈0 (θ(4))Tx(4)0

通过这种方法我们可以得到电影的其他适合的特征。

也就是给定 θ ( 1 ) , . . . , θ ( n u ) \\theta^(1),...,\\theta^(n_u) θ(1),...,θ(nu)来学习特征 x ( i ) x^(i) x(i):

只学习一部电影的特征:

学习多部电影的特征:

**总结:**系统一开始会随机取一些 θ \\theta θ值,有了这些后,我们就可以学习出不同电影的特征 x x x,然后又可以前面的推荐算法来学习出一些更好的参数 θ \\theta θ,不断迭代,最终结果会收敛于一组合理的电影特征和用户参数。

协同过滤算法

上面我们讨论的协同过滤步骤如下:

  1. 给定特征 x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^(1),x^(2),...,x^(m) x(1),x(2),...,x(m),估计参数 θ ( 1 ) , . . . , θ ( n u ) \\theta^(1),...,\\theta^(n_u) θ(1),...,θ(nu)

  1. 利用第一步得到的 θ ( 1 ) , . . . , θ ( n u ) \\theta^(1),...,\\theta^(n_u) θ(1),...,θ(nu),估计特征 x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^(1),x^(2),...,x^(m) x(1),x(2),...,x(m)

我们要做的是不断重复这些计算,不断优化 θ \\theta θ x x x.

实际上还有一个更有效率的算法,能够将 x x x θ \\theta θ同时计算出来,因此我们定义这个新的代价函数 J J J是关于特征 x x x和参数 θ \\theta θ的函数,其实就是上面两个代价函数的组合:

算法步骤:

  1. 初始化 x ( 1 ) , x ( 2 ) , . . . , x ( m ) , θ ( 1 ) , . . . , θ ( n u ) x^(1),x^(2),...,x^(m),\\theta^(1),...,\\theta^(n_u) x(1),x(2),...,x(m)θ(1),...,θ(n机器学习强基计划4-3:详解朴素贝叶斯分类原理(附例题+Python实现)

    机器学习梯度下降与正规方程(附例题代码)

    图文详解神秘的梯度下降算法原理(附Python代码)

    独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

    大数据 & AI 人工智能数据科学家必学的 9 个核心机器学习算法

    手把手教TensorFlow(附代码)