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


    系列文章目录

    第十六章 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 值,来求特征的值,再利用求得的特征值来求位置的参数值,最终对目标进行预测。这就是协同过滤算法。

  • 相关阅读:
    力扣 | 2582递枕头 | 取余?滑动窗口?异曲同工?
    宝塔Linux面板命令大全
    【网安大模型专题10.19】论文4:大模型+自动生成代码评估:改进自动化测试方法、创建测试输入生成器、探索新的评估数据集扩充方法,提高编程基准的精度
    DevOps系列---【jenkinsfile使用sshpass发送到另一台服务器】
    项目立项管理
    海量数据场景下的算法问题1:透彻理解从40个亿中产生一个不存在的整数
    密码学系列4-选择密文安全,同态加密安全性
    中间件环境搭建配置过程解读
    记录:R语言生成热图(非相关性)
    linux-划分分区&挂载磁盘
  • 原文地址:https://blog.csdn.net/m0_51816252/article/details/126229588