【机器学习】无监督学习中的协同过滤算法(推荐系统)

系列文章目录

第十六章 Python 机器学习入门之协同过滤算法


目录

系列文章目录

前言

一、推荐系统

1 什么是推荐系统算法

2 如何为这个算法计算代价函数

二、协同过滤算法

三、二进制标签

总结


前言

在无监督学习中,协同过滤算法使用的还是很多的,比如我们常见的逛淘宝时,系统可以根据我们的浏览内容或者搜索词等给我们推荐商品、抖音每天推荐的短视频等。这些都是运用了无监督学习中的协同过滤算法。


一、推荐系统

1 什么是推荐系统算法

当我们进行网上购物时,网站会根据我们浏览的物品,从而给我们推荐我们可能想要购买的物品,这个就是推荐系统。

让我们来看看如何开发一个推荐系统,以推荐电影为例。

我们有一个数据集,4个用户对 5部电影的评价,我们有电影的两个特征,浪漫电影和动作片,放入表格,如图。

使用n_u 表示用户数, m_u 表示电影数,n 表示有几个特征。则 n_u = 4,  m_u = 5, n = 2.

如果我们想预测用户1 Alice 对第三部电影的评分,结果如图,可以写出一个很像线性回归的公式。

将各个参数带入,得出的结果是0.49,这就是算法预测的结果。

可以将这个公式进行推广,用户J 对电影 i的评价,公式如图下角。

电影 i是X(i) 的函数,X(i) 是电影 i的特征。

注意,这个公式看起来很像线性回归,但是对于4个用户来说,它们会有4个不同的公式。

2 如何为这个算法计算代价函数

r(i,j)  表示用户j 是否对电影 i进行评分,如果评分了 值为1,没有评分值为2.

y(i, j ) 表示  用户j  对电影 i给出的评分

w(j),b(j) 是作为用户j 的参数

X(i) 作为电影i的特征向量

预测的评分公式就是 w(j)*X(i) + b(j)

m(j) 表示用户j 评分的电影数量

我们要做的就是在给定数据的情况下学习参数w(j)、b(j)

使用代价函数可以写成均方误差标准

注意这个公式,因为用户没有给所有的电影进行评分,所以我们计算的 代价 只对用户j实际进行行评分的电影i进行求和,即r(I,j) = 1 时 i的值求和。最后使用1/2*m(j) 进行归一化。

这个就是计算参数w(j)、b(j) 的公式了,为了防止过拟合,我们还会加上 正则化参数lambda 项,如图。

其中的m(j )项可以消去,对求参数也不会有任何影响。

学习所有用户的参数公式:

二、协调过滤算法

协调过滤算法  collaborative filtering algorithm

有了计算参数的代价函数,但是这个公式是需要特征的。

每部电影都有特征,但是如果我们没有特征怎么来计算这些参数呢?

回到先前的例子,我们不知道特征的值是多少,假设我们知道参数的值w(j)、b(j),那么就可以使用公式来计算特征的值了。

 这里为了方便,将b(j)都设置为0,可以看见,带入公式,我们可以算出特征值。

为此,我们可以创建一个代价函数来学习特征的值。

注意,可以这样做是因为,在协同过滤中,同一个项目有多个用户来评价同一部电影。我们有4个用户的参数,允许我们去尝试猜测特征的值。而线性回归中这样做是不行的,因为线性回归我们只有一组参数,也就是相当于一个用户的参数,我们没有足够的信息来计算特征的值。

所以,只要给定参数,我们可以利用参数构建代价函数来学习特征的值,如上图。

注意,上面求特征的值的代价函数可以使用 的前提是 需要我们提前给定参数w和b 的,那这些参数怎么来呢?

我们可以将特征x也看成参数,将w(j)、b(j)、x(i) 3个参数放在一起求,具体做法就是将两个代价函数相结合,如图,这就是协调过滤算法

有了代价函数了,那么如何最小化代价函数来求得合适的参数呢?我们可以使用梯度下降来计算。

与线性回归的梯度下降类似,我们可以写出梯度下降的公式。

小结:

我们得出的平均值称为协同过滤,协同过滤就是指,因为多个用户合作,评价了同一部电影,我们可以借此来猜测适合电影的特征,而这又反过来允许我们预测用户对 尚未评价的同一部电影 进行评价。

协同过滤就是从多个用户那收集数据,用户之间的这种协作可以帮助我们预测未来甚至其他用户的评分。

三、二进制标签

推荐系统或协同过滤算法的许多重要应用都涉及二进制标签。

我们知道二进制标签相当于二分类问题,如何使用泛化方法,将模型从线性回归到逻辑回归,再进行预测。

在前面的预测用户对电影评分的例子中,我们使用的模型很像线性回归,这里我们要处理逻辑回归中的二分类问题,所以我们的预测模型也要做出改变。

有了模型后,为了构建这个算法,我们还必须改变平方误差来改变代价函数,使得代价函数更适合逻辑回归模型的二进制标签的代价函数。

根据我们前面使用的代价函数,可以写出二进制标签的代价函数,如图

 图中黄色部分的损失函数也被称为二元交叉熵损失函数。


总结

所谓的协同过滤算法就是指有多个用户参与其中,很像之前学的线性回归和逻辑回归,但又不同。其原因还是有多用户参与,它可以通过已知的参数w,b 值,来求特征的值,再利用求得的特征值来求位置的参数值,最终对目标进行预测。这就是协同过滤算法。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值