机器学习推荐算法(附例题代码)
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.90⎦⎤∈Rn+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 θ,不断迭代,最终结果会收敛于一组合理的电影特征和用户参数。
协同过滤算法
上面我们讨论的协同过滤步骤如下:
- 给定特征 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 ) , . . . , θ ( 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 θ的函数,其实就是上面两个代价函数的组合:
算法步骤:
- 初始化
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建立能源市场算法交易的机器学习框架(附链接)