07 物以类聚 基于特征的七种算法模型

news2024/11/13 3:56:06

你好,我是大壮。在 06 讲中,我们介绍了协同过滤(CF)算法,它主要通过用户行为构建用户物品共现矩阵,然后通过 CF 算法预测结果实现个性化推荐。其实,除了利用用户行为特征之外,我们还可以利用用户、物品自身特征等辅助信息进行结果预测。

基于物品特征的推荐问题,我们一般通过回归模型进行实现。首先,回归模型会通过算法预测出一个介于 0~1 之间的连续值,这个值代表一种可能性,然后推荐系统将得到的可能性通过排序的方式推荐给用户,最终实现个性化推荐。

因此,这一讲我们介绍一下基于物品特征的推荐算法的演进之路。

线性回归模型

在回归模型中,最简单的形式就是线性回归模型,它的表达式如下所示:

线性回归对于给定的输入 x,会输出一个数值 f(x)。为了消除常数项 b,我们可以令image.png,同时image.png,也就是说给 x 多加一项,使得它的值恒为 1,这时 b 就到了 w 中。于是,我们得到了线性回归模型方程的一个化简形式,如下所示:

对线性回归模型来说,它具有模型简单、可解释性强、运算速度快等优点,但也仅限于线性关系的拟合,如果变量之间是非线性的关系则不适用。

在线性回归模型的基础上,接着我们一起看下逻辑回归模型,它恰好能解决变量之间非线性关系的问题。

逻辑回归(LR)模型

逻辑回归模型预测的目标是一个概率,它的取值在 [0,1] 区间,而线性回归模型的值域在image.png区 间。因此,我们不能直接使用线性模型进行打分推荐,而是需要通过一个模型将线性模型的值域压入 [0,1] 区间。

此时,我们想到使用 Sigmoid 函数进行处理,它的表达式如下所示:

将线性回归模型的表达式代入 Sigmoid 函数后,我们将得到一个逻辑回归模型,它的表达式如下所示:

其实,逻辑回归模型还有另外一种表达式,如下所示:

逻辑回归模型相比协同过滤模型而言,它不单单考虑了用户的行为特征,还加入了年龄、性别等用户特征和时间、地点等物品特征,从而大大提升了模型表达能力。因此,它的优点是模型简单、训练开销小、可解释性强、易于并行化。

不过,线性回归模型和逻辑回归模型都存在一定缺陷,因为它们都是将各个特征进行独立考虑,并没有考虑到特征与特征之间的相互关系。因此,这两种模式的表达能力仍然比较弱,需要大量具备业务背景知识的人员进行人工特征筛选与交叉。

实际上,特征之间可能存在一定关联性。以 58 同城 APP 本地服务推荐为例,一般来说,查看“租车”品类的男性用户较多,而查看“保姆月嫂”品类的女性用户较多。从中我们可以看出,性别与本地服务的品类存在一定关联性。

如果我们能够找出这些特征之间的关联性,将大大提高个性化推荐的准确率。那有没有一种方法能让该模型自动找出这些特征之间的关联性呢?答案:有的,这就诞生了 POLY2 模型。

POLY2 模型

在逻辑回归模型的基础上,我们使用了一种暴力方式将所有特征实现了两两相交进行组合。于是,原来的 LR 模型变成了 POLY2 模型(Degree-2 Polynomial Margin),它的表达式为:

这里我们看到,表达式中的最后一项,POLY2 模型通过暴力的方式将所有的特征进行两两相交,表达了每两个单一特征之间的关系。

在该表达式中,只有第三项不为 0 时才有意义,而这种情况只有X1、X2都不为 0 时才能真正满足。

不过,在数据稀疏的情况下,满足交叉项不为 0 的样本将非常少。在训练样本不足的情况下,很容易导致参数w{ij} 训练不充分,从而使得推荐结果不准确,最终影响模型效果。因此,这种特征组合模式存在一定缺陷:

大大增加了特征维度:因为它会让模型复杂度由原来的 O(n) 上升到 image.png

模型不收敛:因为数据极度稀疏,模型在训练过程中很难收敛。

那有没有一种方法能在处理稀疏数据的同时保持特征之间的联系呢?基于这样的背景之下,因子分解机(FM)模型诞生了。

因子分解机(FM)模型

因子分解机(FM) 模型表达式如下所示:

在公式中,我们可以把 FM 模型看成由两部分组成:前两项是逻辑回归(LR)模型(因为前面已经介绍过了,这里就不赘述了),第三项为二阶特征组合,意思是该模型对每个输入特征都需要学习一个低维的隐向量表达V(即深度神经网络中的向量表征)。

这里我们把原先的w{ij} 换成了V{i} 和 V{j} 的点积,V{i} 表示对 x{i} 这个特征的隐向量表达,V{j} 表示对 x{j}这个特征的隐向量表达,特征组合权重是通过各自单一特征的隐向量内积进行体现。

然而,这样的特征交叉会存在什么问题呢?以 58 同城 APP 本地服务租车业务的用户为例,根据平台用户画像,会出现性别、偏好车型、偏好品牌等特征。而一个特征和其他特征进行二阶特征组合时,可能会出现同一个特征向量共享的情况(比如性别与偏好车型组合、性别与偏好品牌组合共享了同一个特征向量),这就使得模型表达能力十分有限。

此时,如果我们对不同的性别使用不同的隐向量表征,模型将会变得更细致,表达能力也将变得更强,这就涉及接下来要介绍的域感知因子分解机(FFM)模型。

域感知因子分解机(FFM)模型

在因子分解机(FM) 模型的基础上,我们引入了一个场(Field)的概念,从而形成了一个新模型——FFM(Field Factorization Machine),它的表达式如下所示:

通过将因子分解机(FM) 模型的二阶项隐向量由原来的变成image.png,原来的 V{j} 变成了image.png。此时,每个特征不再对应一个隐向量,而是对应一组不同域的隐向量。image.png特征与image.png特征进行交叉时,image.png特征会从image.png的一组隐向量中挑出与特征image.png的域 f2 对应的隐向量image.png 进行交叉,同理 image.png也会与image.png的域 f1 对应的隐向量进行交叉。

相比 FM 而言,因为 FFM 引入了一个场的概念,使得该模型产生了更多辅助信息,表达能力更强了。此时,我们可以把 FM 看作只有一个场的 FFM。

前面我们讲述了逻辑回归(LR)模型主要通过人工进行特征组合,为了解决人工经验的不足,实现自动发现有效的特征并进行特征组合,从而缩短特征挖掘的实验周期,于是衍生出了因子分解机(FM)等高维复杂模型。

FM 模型主要通过隐变量的方式发现两两特征之间的组合关系,不过这种特征组合仅限于两两特征之间。于是,更加复杂的组合模型——GBDT 模型诞生了,它主要用来解决高维特征组合问题。

梯度提升决策树(GBDT)模型

梯度提升决策树(GBDT)模型算是传统机器学习算法中拟合能力最强的算法之一,它通过采用基于函数的线性组合实现了多轮迭代,并在每轮迭代后产生一个弱分类器,最后每个分类器在上一轮分类器的残差基础上进行训练。

一般来说,集成学习会选择分类回归树(CART)作为弱分类器,且每个分类回归树的深度不会很深,最终总分类器通过将每轮训练得到的弱分类器进行加权并求和得到一个结果,具体表达式如下所示:

其中,后面的表示决策树,即弱分类器;M 表示树的个数,即 M 棵树的结果相加。

有了 GBDT 模型的基础,我们再来看看超过二阶特征组合的高维特征组合问题的解决方法。

GBDT+LR 组合模型

GBDT+LR 模型利用 GBDT 自动进行特征筛选和组合,进而生成新的离散特征向量,然后我们将该特征向量当作逻辑回归(LR)模型的输入,最终产出预测结果。

一般来说,逻辑回归(LR)模型本身比较适合处理线性可分的数据,而不适合处理拟合非线性数据。如果我们想让逻辑回归(LR)模型处理拟合非线性数据,就可以利用 GBDT 产生特征的组合。因为该模型对非线性分布数据具备了整体拟合能力,它能通过算法自动、高效地寻找到有效的特征组合,并产生三阶以上的特征组合结果,而 FM、FFM显然不具备如此强的特征组合能力。

此时,我们看到了端到端训练及隐向量技术等深度学习模型的影子,也就是说 GBDT+LR 开启了特征工程模型化的趋势。

到这里,关于推荐系统传统算法模型的演进就全部讲完了。

小结与预告

《道德经》中说:“道常无为而无不为,侯王若能守之,万物将自化”,“无为”是“道”的核心价值观。

对于机器学习领域来说,长期以来,我们都是通过人工的先验知识寻找和组合特征,大大耗费了算法研发人力成本。正所谓有多少人工就有多少智能,这也就偏离了算法技术的“道”。而如何通过模型演化,“无为”地(自动、高效)寻找和组合特征是算法界的道。因此,从 08 讲开始,我们将沿着算法的“道”,深入讲解推荐系统中最引人入胜的深度学习算法。

对于推荐系统传统算法模型,你是否还有不同的见解?欢迎在留言区与我互动、交流。

另外,如果你觉得本专栏有价值,欢迎分享给更多好友哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

决策树(ID3,C4.5,C5.0,CART算法)以及条件推理决策树R语言实现

### 10.2.1 ID3算法基本原理 ### mtcars2 <- within(mtcars[,c(cyl,vs,am,gear)], {am <- factor(am, labels c("automatic", "manual"))vs <- factor(vs, labels c("V", "S"))cyl <- ordered(cyl)gear <- ordered…

VMware与centos安装

目录 VM安装 安装centos VM安装 VMware Workstation Pro是VMware&#xff08;威睿公司发布的一袋虚拟机软件&#xff09;&#xff0c;它主要功能是可以给用户在单一的桌面上同时运行不同的操作系统&#xff0c;也是可以进行开发、测试、部署新的应用程序的最佳解决方案。 开始…

力扣144题:二叉树的先序遍历

给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出&am…

跳妹儿学编程之ScratchJr(9):程序控制积木篇—短跑比赛

跳妹儿学编程之ScratchJr(7)&#xff1a;动作积木篇—爸爸去散步 跳妹儿学编程之ScratchJr(8)&#xff1a;外观积木篇—捉迷藏 跳妹儿学编程之ScratchJr(9)&#xff1a;程序控制积木篇—短跑比赛 引言 在之前的一篇文章中&#xff0c;我们了解了ScratchJr的动作积木和外观积…

排序(三)——归并排序(MergeSort)

欢迎来到繁星的CSDN&#xff0c;本期内容主要包括归并排序(MergeSort)的实现 一、归并排序的主要思路 归并排序和上一期讲的快速排序很像&#xff0c;都利用了分治的思想&#xff0c;将一整个数组拆成一个个小数组&#xff0c;排序完毕后进行再排序&#xff0c;直到整个数组排序…

php反序列化--2--PHP反序列化漏洞基础知识

一、什么是反序列化&#xff1f; 反序列化是将序列化的字符串还原为PHP的值的过程。 二、如何反序列化 使用unserialize()函数来执行反序列化操作 代码1&#xff1a; $serializedStr O:8:"stdClass":1:{s:4:"data";s:6:"sample";}; $origina…

autoware.universe源码略读(3.15)--perception:object_merger

autoware.universe源码略读3.15--perception:object_merger Overviewnode&#xff08;enum&#xff09;MSG_COV_IDX&#xff08;Class&#xff09;ObjectAssociationMergerNode&#xff08;Func&#xff09;isUnknownObjectOverlapped&#xff08;Func&#xff09;convertListT…

Directory Opus 13 专业版(Windows 增强型文件管理器)值得购买?

在使用电脑时&#xff0c;总少不了和文件打交道。系统自带的 Explorer 资源管理器功能又非常有限&#xff0c;想要拥有一个多功能文件管理器吗&#xff1f; Directory Opus 是一款老牌多功能文件管理器&#xff0c;能很好地接管 Windows 资源管理器。 接管资源管理器 Directo…

【Linux系列】TEE 命令:同时输出到终端和文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

(leetcode学习)15. 三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&a…

java算法day13

java算法day13 104 二叉树的最大深度111 二叉树的最小深度226 翻转二叉树101 对称二叉树100 相同的树 104 二叉树的最大深度 我最开始想到的是用层序遍历。处理每一层然后计数。思路非常的清楚。 迭代法&#xff1a; /*** Definition for a binary tree node.* public class…

Nginx入门到精通三(反向代理1)

下面内容整理自bilibili-尚硅谷-Nginx青铜到王者视频教程 Nginx相关文章 Nginx入门到精通一&#xff08;基本概念介绍&#xff09;-CSDN博客 Nginx入门到精通二&#xff08;安装配置&#xff09;-CSDN博客 Nginx入门到精通三&#xff08;Nginx实例1&#xff1a;反向代理&a…

Linux系统搭建轻量级个人博客VanBlog并一键发布公网远程访问

文章目录 前言1. Linux本地部署2. VanBlog简单使用3. 安装内网穿透4. 创建公网地址5. 创建固定公网地址 前言 今天和大家分享如何在Linux Ubuntu系统搭建一款轻量级个人博客VanBlog&#xff0c;并结合cpolar内网穿透软件生成公网地址&#xff0c;轻松实现随时随地远程访问本地…

Python与自动化脚本编写

Python与自动化脚本编写 Python因其简洁的语法和强大的库支持&#xff0c;成为了自动化脚本编写的首选语言之一。在这篇文章中&#xff0c;我们将探索如何使用Python来编写自动化脚本&#xff0c;以简化日常任务。 一、Python自动化脚本的基础 1. Python在自动化中的优势 Pyth…

内存RAS技术介绍:内存故障预测

故障预测是内存可靠性、可用性和服务性&#xff08;RAS&#xff09;领域中的一个重要方面&#xff0c;旨在提前识别潜在的不可纠正错误&#xff08;UE&#xff09;&#xff0c;以防止系统崩溃或数据丢失。 4.1 错误日志记录与预测基础 错误一般通过Linux内核模块Mcelog记录到…

1.31、基于长短记忆网络(LSTM)的发动机剩余寿命预测(matlab)

1、基于长短记忆网络(LSTM)的发动机剩余寿命预测的原理及流程 基于长短期记忆网络(LSTM)的发动机剩余寿命预测是一种常见的机器学习应用&#xff0c;用于分析和预测发动机或其他设备的剩余可用寿命。下面是LSTM用于发动机剩余寿命预测的原理和流程&#xff1a; 数据收集&#…

实践之K近邻算法实现红酒聚类

前言 K近邻算法是一种用于分类和回归的非参数统计方法&#xff0c;通过计算样本与训练样本的距离&#xff0c;找出最接近的k个样本进行投票来确定分类结果。算法的基本要素包括K值、距离度量和分类决策规则。 K值决定了邻居的影响程度&#xff0c;距离度量反映了样本间的相似度…

python条件

条件语句 if语句 if...else语句 if...elif...else语句 嵌套 is is 是一个身份运算符&#xff0c;用于比较两个对象的身份&#xff0c;即它们在内存中的地址是否相同。这与比较两个对象是否相等的 运算符不同。 运算符比较的是两个对象的值是否相等。 比较对象 比较基本数据…

npm发布的包如何快速在cnpm上使用

npm发布的包如何快速在cnpm上使用 解决方案 前往淘宝npm镜像官网 搜索插件库并点击同步 等待一分钟即可查看最新版本

C++ 类和对象 赋值运算符重载

前言&#xff1a; 在上文我们知道数据类型分为自定义类型和内置类型&#xff0c;当我想用内置类型比较大小是非常容易的但是在C中成员变量都是在类(自定义类型)里面的&#xff0c;那我想给类比较大小那该怎么办呢&#xff1f;这时候运算符重载就出现了 一 运算符重载概念&…