《Python数据分析与机器学习实战-唐宇迪》读书笔记第13章--推荐系统

python数据分析我的学习读书笔记-目录索引 html

 第13章推荐系统python

   大数据与人工智能时代,互联网产品发展迅速,竞争也愈来愈激烈,而推荐系统在其中发挥了决定性的做用。例如,某人观看抖音的时候,特别喜欢看篮球和游戏的短视频,只要打开APP,就都是熟悉的旋律,系统会推荐各类精彩的篮球和游戏集锦,根本不用本身动手搜索。广告与新闻等产品也是如此,都会抓住用户的喜爱,对症下药才能将收益最大化,这都归功于推荐系统,本章向你们介绍推荐系统中的经常使用算法。算法

13.1推荐系统的应用机器学习

   在大数据时代,每分钟都在发生各类各样的事情,其对应的结果也都经过数据保存下来,如何将数据转换成价值,就是推荐系统要探索的目标(见图13-1)。异步

 邀月工做室

  图13-1 互联网数据量ide

  推荐系统在生活中随处可见,购物、休闲、娱乐等APP更是必不可缺的法宝,在双十一购物时,估计你们都发现了,只要是搜索过或者浏览过相似商品,都会再次出如今各类广告位上。函数

  你可能喜欢的电影,你可能喜欢的音乐,你可能喜欢的……这些你们再熟悉不过,系统都会根据用户的点击、浏览、购买记录进行个性化推荐,如图13-2所示。图13-2(b)是用笔者的京东帐号登陆时的专属排行榜,全是啤酒,由于以前搜索过几回啤酒关键词却没有买,系统天然会认为正在犹豫买不买呢。post

 邀月工做室

  图13-2 推荐系统场景学习

  图13-3是亚马逊、京东、今日头条3个平台的推荐系统的数据,几个关键指标都显示了其价值所在,那么怎么进行推荐呢?首先要有各项数据,才能作这件事。例如,你在抖音中观看某些视频的停留时间较长,帐号上就会打上一些标签。例如,笔者喜欢看篮球和打游戏,那么标签可能就是篮球、王者荣耀、游戏迷……这些标签仅仅为了优化用户体验吗?本身使用较多的APP推荐的广告是否都是常关注的领域呢?大数据

 邀月工做室

  图13-3 推荐系统的价值

当你们使用产品时,无形之中早已被打上各类标签,这就是用户画像,并不须要知道你的模样,只要知道你的爱好,投其所好可以吸引你们就足够了(见图13-4)。

 邀月工做室

  图13-4 用户画像

 

13.2协同过滤算法

  若是你们想邀请朋友去看一场电影,你的首选对象是谁?应该是本身的好朋友吧,由于大家有共同的爱好。如今有几部电影同时上映,实在拿不定主意选哪一部,该怎么办呢?这时可能会有两种方案。

  • 1.问问各自的好朋友,由于彼此的品位差很少,朋友喜欢的电影,大概也符合你的口位。
  • 2.回忆一下看过的喜欢的电影,看看正在上映的这些电影中,哪部与以前看过的相似。

  问题是如何让计算机肯定哪一个朋友跟你的喜爱相同呢?如何肯定哪一部新的电影与你以前看过的相似呢?这些任务能够经过协同过滤来完成,也就是经过用户和商品的画像数据进行类似度计算(见图13-5)。

 邀月工做室

  图13-5 类似计算

  协同过滤看起来复杂,作起事来仍是很简单的,在推荐系统中主要有两种方案。

  • 1.基于用户的协同过滤:找最类似的朋友,看看他们喜欢什么。
  • 2.基于商品的协同过滤:找看过的商品,看看哪些比较相似。

13.2.1基于用户的协同过滤

   首先来看一下基于用户的协同过滤,假设有5组用户数据,还有用户对两种商品的评分,经过不一样的评分,计算哪些用户的品位比较类似。

  最直接的方法是,把用户和评分数据展现在二维平面上,如图13-6所示。很明显,用户A、C、D应该是一类人,他们对商品1都不太满意,而对商品2比较满意。用户E和B是另一类,他们的喜爱与用户A、C、D正好相反。

  只要有数据,计算类似度的方法比较多,下面列出几种常见的类似度计算方法:

 邀月工做室

  图13-6 用户类似度

  • 欧几里得距离(Euclidean Distance)

 邀月工做室

  • 皮尔逊相关系数(Pearson Correlation Coefficient)

 邀月工做室

  • 余弦类似度(Cosine Similarity)

 邀月工做室

  • 协方差

 邀月工做室

  类似度的计算方法还有不少,对于不一样任务,你们均可以参考使用,其中欧几里得距离早已家喻户晓,基本全部涉及距离计算的算法中都会看到它的影子。皮尔逊相关系数也是一种常见的衡量指标,即用协方差除以两个变量的标准差获得的结果,其结果的取值范围在[−1,+1]之间。图13-7展现了不一样分布的数据所对应的皮尔逊相关系数结果。

   由图可见,当两项指标很是类似的时候,其值为+1,例如学习时长和学习成绩的关系,学习时间越长,学习成绩越好。当两项指标彻底颠倒过来的时候,其值为−1,例如游戏时长和学习成绩的关系,游戏时间越长,学习成绩越差。当两项指标之间没有关系的时候,其值就会接近于0,例如身高和学习成绩,它们之间并无直接关系。

  在基于用户的推荐中,一旦经过类似度计算找到那些最相近的用户,就能够看看他们的喜爱是什么,若是在已经购买的商品中,还有一件商品是待推荐用户尚未购买的,把这件商品推荐给用户便可。

  假设系统向用户A推荐一款商品,经过历史数据得知,其已经购买商品A和C,尚未购买商品B和D,此时系统会认为接下来他可能要在商品B和D中选一个。那给他推荐商品B仍是商品D呢?按照协同过滤的想法,首先要找到和他最类似的用户,经过对比发现,用户A和用户C的购买状况十分相似,都购买了商品A和C,此时能够认为用户C和用户A的品位类似,而用户C已经购买了商品D,因此最终给用户A推荐了商品D,这就是最简单的基于用户的协同过滤(见图13-8)。

 邀月工做室

  图13-7 相关系数

 邀月工做室

  图13-8 基于用户的协同过滤

  基于用户的协同过滤作起来虽然很简单,可是也会遇到如下问题。

  • 1.对于新用户,很难计算其与其余用户的类似度。这也是常常讨论的用户冷启动问题,最简单的办法就是用排行榜来替代推荐。
  • 2.当用户群体很是庞大的时候,计算量就很是大。
  • 3.最不可控的因素是人的喜爱是变化的,每个时间段的需求和喜爱可能都不相同,而且购买很大程度上都是冲动行为,这些都会影响推荐的结果。

  综上所述,基于用户的协同过滤并不常见,通常用在用户较少而商品较多的状况下,可是中国市场偏偏相反,用户群体十分庞大,商品类别相对更少。

13.2.2基于商品的协同过滤

   基于商品的协同过滤在原理上和基于用户的基本一致,只不过变成要计算商品之间的类似度。

  假设购买商品A的用户大几率都会购买商品C,那么商品A和C可能就是一套搭配的产品,例如相同牌子不一样口味的冰淇淋,或者是啤酒和尿布的故事……接下来若是用户C购买了商品A,确定要向他推荐商品C了(见图13-9)。

 邀月工做室

  图13-9 基于商品的协同过滤

  再来看一个实际的例子,如图13-10所示,有12个用户,6部电影,能够把它们看成一个矩阵,其中的数值表示用户对电影的评分。空着的地方表示用户尚未看过这些电影,其实作推荐就是要估算出这些空值均可能是什么,若是某一处获得较高的值,意味着用户极可能对这个电影感兴趣,那就给他推荐这个电影。

 邀月工做室

  图13-10 基于商品的协同过滤

  此时任务已经下达,要对5号用户进行推荐,也就是要分别计算该用户对全部未看过电影的可能评分,以其中一部电影的计算方法为例,其余位置的计算方法相同。例如想求5号用户对1号电影的喜爱程度,假设已经经过某种类似度计算方法获得1号电影和其余电影的类似度(例如经过比对电影类型、主演、上映时间等信息),因为5号用户以前看过3号电影和6号电影(类似度为负分的暂时不考虑),因此须要分别考虑这两部电影和1号电影的类似度,计算方法如图13-11所示。

 邀月工做室

  图13-11 推荐指数计算

  这里能够把类似度看做权重项,类似度越高,起到的做用越大,最后再进行归一化处理便可。最终求得5号用户对1号电影的评分值为2.6,看来他可能不喜欢1号电影。

  关于类似度的计算和最终结果的估计,还需具体问题具体分析,由于不一样数据所需计算方式的差异仍是很大。与基于用户的协同过滤相比,基于商品的协同过滤最大的优点就是用户的数量可能远大于商品的数量,计算起来更容易;并且商品的属性基本都是固定的,并不会由于人的情感而发生变化,就像鼠标怎么也变不成键盘。在很是庞大的用户-商品矩阵中,计算推荐涉及的计算量十分庞大,因为商品标签相对固定,能够不用像基于用户的那样频繁更新。

 

13.3隐语义模型

   协同过滤方法虽然简单,可是其最大的问题就是计算的复杂度,若是用户-商品矩阵十分庞大,这个计算量多是难以忍受的,而实际状况也是如此,基本须要作推荐的产品都面临庞大的用户群体。如何解决计算问题,就是接下来的主要目标,使用隐语义模型的思想能够在必定程度上巧妙地解决这些庞大的计算问题。

13.3.1矩阵分解思想

   真实数据集中,用户和商品数据会构成一个很是稀疏的矩阵,假设在数以万计的商品中,一个用户可能购买的商品只有几种,那么其余商品位置上的数值天然就为0(见图13-12)。

 邀月工做室

  图13-12 稀疏矩阵

  稀疏矩阵的问题在于考虑的是每个用户和每个商品之间的联系,那么,可否换一种思路呢?假设有10万个用户和10万个商品,先不考虑它们之间直接的联系,而是引进“中介”,每一个“中介”能够服务1000个商品和1000个用户,那么,只须要100个“中介”就能够完成任务。此时就将原始的用户-商品问题转换成用户-中介和中介-商品问题,也就是把本来的一个庞大的矩阵转换成两个小矩阵。

  矩阵分解的目的就是但愿其规模可以缩减,更方便计算,现阶段推荐系统基本都是基于矩阵分解实现的。

  这里能够简单来计算一下,按照以前的假设,用户-商品数据集矩阵为105×105=1×1010,很是吓人的一个数字。加入中介以后,用户-中介矩阵为105×1000,中介-商品矩阵为1000×105,分别为1×107,在数值上差了几个数量级。

  图13-13是矩阵分解的示意图,也就是经过引入一个“中介”来转换原始问题,目的就是为了下降计算复杂度,这里能够把用户数n和商品数m都看成很是庞大的数值,而“中介”k倒是一个相对较小的值。

 邀月工做室

  图13-13 矩阵分解

  一般把“中介”k定义为隐含因子,隐含因子把数据进行了间接的组合,小小的改变却解决了实际中的大问题。在推荐系统中,广泛使用矩阵分解的方法进行简化计算,其中最经常使用的手段就是SVD矩阵分解,在下一章的实战中,你就会见到它的影子。

13.3.2隐语义模型求解

   如何求解隐语义模型呢?其实在推荐系统中,想获得的结果就是稀疏矩阵中那些为0的值多是什么,也就是想看一下用户没有买哪些商品。首先计算出其购买各类商品的可能性大小,而后依照规则选出最有潜力的商品便可。

  其中的难点在于如何构建合适的隐含因子来帮助化简矩阵,如图13-14所示,F是要求解的隐含因子,只须要把它和用户与商品各自的联系弄清楚便可。

 邀月工做室

  图13-14 隐含因子

  R矩阵能够分解成P矩阵和Q矩阵的乘积,如图13-15所示。此时只需分别求解出P和Q,天然就能够还原回R矩阵:

 邀月工做室

 邀月工做室

  图13-15 隐含因子求解

  这里还须要考虑显性和隐性反馈的问题,也就是数据集决定了接下来该怎么解决问题,先来看一下显性和隐性的区别(见表13-1)。

  表13-1 显性与隐性反馈

 邀月工做室

  常见的带有评分的数据集属于显性反馈,只有行为没有具体评估指标的就是隐形反馈。并非全部数据集都是理想的,有时须要本身定义一下负样本。一般状况下,对于一个用户,没有购买行为的商品就是负样本,关于负样本的选择方法还有不少,能够根据实际状况来定义。在商品集K(u,i)中,若是(u,i)是正样本,则rui=1;若是(u,i)是负样本,则rui=0。

  按照机器学习的思想,能够把隐含因子看成要求解的参数,依旧仍是这个老问题,什么样的参数可以更符合实际的数据,先指定一个目标函数:

 邀月工做室

  看起来与回归中的最小二乘法有点相似,计算由隐含因子还原回来的矩阵与原始矩阵的差别程度,而且加入正则化惩罚项。

  按照以前回归中的求解思路,此时能够利用梯度降低进行迭代优化,首先计算梯度方向:

 邀月工做室

  接下来按照给定方向,选择合适的学习率进行更新便可:

 邀月工做室

  在建模过程当中,须要考虑如下参数。

  • 1.隐含因子的个数或者看成隐分类的个数,须要给定一个合适的值。
  • 2.学习率α一直都是机器学习中最难搞定的。
  • 3.既然有正则化惩罚项,确定会对结果产生影响。
  • 4.正负样本的比例也会有影响,对于每个用户,尽可能保持正负样本比例持平。

  隐语义模型在必定程度上下降了计算的复杂度,使得有些根本没办法实现的矩阵计算变成可能。在协同过滤中,每一步操做都具备实际的意义,很清晰地表示在作什么,可是隐语义模型却很难进行解释,它与PCA降维获得的结果相似,依旧很难知道隐含因子表明什么,不过不要紧,一般只关注最后的结果,中间过程究竟作什么,计算机本身知道就好。

13.3.3评估方法

   当建模完成以后,确定要进行评估,在推荐系统中,能够评估的指标有不少,其中经常使用的均方根偏差(Root Mean Squared Error,RMSE)和均方偏差(Mean Square Error,MSE)分别定义为:

 邀月工做室

  在评估方法中,不仅有这些传统的计算方式,还须要根据实际业务进行评估,例如覆盖率、多样性。这些指标可以保证系统推荐的商品不至于老是那些常见的。

假设系统的用户集合为U,商品列表为I,推荐系统给每一个用户推荐一个长度为N的商品列表R(u),根据推荐出来的商品占总商品集合的比例计算其覆盖率:

 邀月工做室

  多样性描述了推荐列表中物品两两之间的不类似性。假设那么用户u的推荐列表R(u)的多样性定义以下:

  定义了物品i和j之间的类似度,

 邀月工做室

  推荐系统的总体多样性能够定义为全部用户推荐列表多样性的平均值:

 邀月工做室

  这里给你们简单介绍了几种常见的评估方法,在实际应用中,须要考虑问题的角度还有不少,例如新颖性、惊喜度、信任度等,这些都须要在实际问题中酌情考虑。

 

本章小结:本章介绍了推荐系统中经常使用的两种方法:协同过滤与隐语义模型。相对而言,协同过滤方法更简单,可是,一旦数据量较大就比较难以处理,隐语义模型和矩阵分解方法都是现阶段比较经常使用的套路。下一章将带你们实际感觉一下推荐系统的魅力。

 

第13章完。推荐实战:《Python数据分析与机器学习实战-唐宇迪》读书笔记第14章--音乐推荐系统实战

python数据分析我的学习读书笔记-目录索引

 

该书资源下载,请至异步社区:https://www.epubit.com

相关文章
相关标签/搜索