推荐系统 (协同过滤)

简介: 推荐系统 (协同过滤)


上礼拜刚在Amazon买了TOTORO的汽车贴纸,这几天打开Amazon都是这些相关的推荐。

image.gif编辑

哈哈,不管你是在国内,还是国外,用淘宝还是Amazon,你应该都有这种体验吧;

image.gif编辑

不懂推荐系统背后原理的人,会觉得,

“哇!这原来就是传说中的人工智能推荐啊,好了解我哦”

懂得人:“哦,这个网址,背后用的是哪个算法啊。”

今天,不管你懂不懂,八分钟保证你看懂推荐系统背后的原理。

01 日常生活中的2种简单的推荐方法

    • 第一种就是非定制的推荐系统;
    • 第二种就是定制化的推荐系统。

    什么叫做非定制化的推荐系统呢?

    简单来说就是,什么最热卖,什么关注的人多,就推荐你什么。

    image.gif编辑

    这样就产生一个问题了。

    一个有糖尿病的老爷爷去买水果,老板也向他推荐西瓜。如果你是这位老爷爷,你肯定要不高兴了吧。

    image.gif编辑

    原本好好的生意,就这样泡汤了。

    老板,想了想,我是不是应该改变一下推荐方法啊。

    image.gif编辑

    上面的故事,就是平时我们日常生活中,会用到的推荐系统:

    定制化的推荐系统,和非定制化的推荐系统。

    02 定制化推荐系统的推荐方法

    讲到定制化的推荐系统里面常用的方法,一般常用的有两大类。

    第一种:协同过滤(collaborative filtering),什么是协同过滤呢,这个我们过会详细讲,因为这是目前蛮常用的推荐方法。

    第二种:基于内容的推荐(content-based recommendation)。

    基于内容的推荐大致是,我看了一篇关于足球的报道,之后又向我推荐了足球的相关报告。里面用的技术就是基于内容的推荐。

    image.gif编辑

    还有一些其他的推荐方法,比如co-occurrence,或者把几种方法的结果都综合组合一下的方法。

    今天这篇文章,主要就是讲的是推荐系统里的明星算法,也就是前面说的第一种:协同过滤 (collaborative filtering)~~

    03 协同过滤是什么

    协同过滤这个算法,目的就是找相似。

    其中:找相似,可以是找相似的人,也可以找相似的东西。

      • 比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;
      • 找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似。

      讲了这个两个例子,是不是觉得协同过滤最重要的就是找相似啊,哈哈,那我们就讲讲这个算法的核心部分,怎么找相似。

      04 协同过滤相似怎么找

      image.gif编辑

      下面我们做个小练习,回顾一下初中知识,

        • 第一张图两个从原点出发的点,他们之间的夹角是30度,cos𝜽是0.86;
        • 第二张图夹角是90度,cos𝜽是0;
        • 第三张图夹角是150度,cos𝜽是-0.86。

        是不是发现,角度越小,cos𝜽就越接近1,角度越大,cos𝜽就越接近-1。

        那找相似我们就能直接用cos𝜽的大小来描述啦。

        上面这个问题,用初中知识就能算出cos𝜽。

        但是现实生活的例子是很复杂的呀,比如突然从xy轴的两维, 变成xyz的三维,或者很多维的话,算cos𝜽怎么办?

        05 相似度的计算公式

        image.gif编辑

        A点坐标是(0,2,3);

        B点坐标是(5,2,0)

        那这两个点的cos𝜽就是

        分子: 0* 5+2* 2+3* 0 = 4

        分母:sqrt(0^2 + 2^2 + 3^2) * sqrt(5^2 + 2^2 + 0^2) = 19

        分子除以分母,得出来cos𝜽 = 0.21。

        根据我们之前说的越相似,cos𝜽越接近于1来看。你说,A点和B点,算是接近还是不接近呢?

        06 化妆品网站的推荐例子 (找相似的人user-based)

        来讲一个电商网站的推荐例子。

        小美一直喜欢在网上买化妆品,今天晚上,她又打开了常去的网站,逛逛。

        image.gif编辑

        小美呢,以前在这个网站上买过口红,眼影和香水,还给她们评价給过分。

        除了小美的购买的记录,我们还知道,其他人的购买记录和评分,比如小丽,小红,小花。

        我们是不是能够利用其他人的信息,来找到小美最可能买的东西,推荐给她呢?

        这样问题变得很简单了,只要用我们之前说的,找小美和其他所有人之间的cos𝜽,然后挑几个最接近她的人,看她们买过什么,给的评价怎么样,然后推荐给小美,就行了。

        image.gif编辑

        第二步,没有评分的化妆品,我们假设这些人都打0分。

        这样4个小女孩,就变成了之前公式里的4个点。

        小美(4,0,0,5,1,0,0)

        小丽(5,5,4,0,0,0,0)

        小红(0,0,0,2,4,5,0)

        小花(0,3,0,0,0,0,3)

        image.gif编辑

        根据前面的公式,我们算出来

          • 相似度(小美,小丽) = 0.38
          • 相似度(小美,小红) = 0.32
          • 相似度(小美,小花) = 0

          这样看下来,小美和小丽是相对比较相似的,然后是小红。

          image.gif编辑

          这个例子里面,我们挑2个人,小丽和小红,来综合算出推荐给小美的东西。

          由于7样产品里面,小美买过3样,有4样还没有买过和评价过,所以,我们只要知道,另外4样小美可能会评价的分数,那么我们就可以挑最高的推荐给她。

          利用小丽,和小红的评价分数和她们与小美相似度,我们就能推算出小美的评价分数.

          这里,我们用到的是平均加权方法。

          image.gif编辑

            • 小美会给粉饼的打分是 = (5 *0.38 + 0 * 0.32)/(0.38+0) = 5
            • 小美会给粉饼的打分是 = (4 * 0.38 + 0 * 0.32)/(0.38+0) = 4.8
            • 小美会给乳液的打分是 = (0 * 0.38+5 * 0.32)/(0+0.32) = 5

            这样粉饼和润肤露都是5,但由于小丽和小红的相似度最高,她给粉饼是5分,所以我们推荐粉饼给小红。

            等等!让我们倒退到第二步开头,

            第二步,没有评分的化妆品,我们假设这些人都打0分。

            image.gif编辑

            打0分合理吗?

            谁说,她们一定都会给那些没有买过、评价过的化妆品,打0分呀。

            如果一个人以前给2个产品分别打过4分,2分。

            然后,我们取一个平均值:3分。把这个3分,作为没买过东西的可能打分,是不是更合理呢?

            对的,完全正确。

            这个方法在统计里面我们叫做标准化。标准化,不仅解决之前说的不合理性,还能解决每个人的评价标准差异。

            比如,有人自认为5分就是她的最高分,而有些人比较严格觉得3分就是她认为的最高分。但是,其实3分,5分,都是这些人心目中的最高分。

            标准化,就解决了这个问题。

            我们回到之前的表格,在没有评分的地方,我们算出平均值填进去。比如小美的平均值就是(4+5+1)/3 = 10/3; 小丽是(5+5+4)/3 =14/3。。。

            image.gif编辑

            为了达到标准化每个人的评价要求差异,我们将每个人的平均值就变成以0为中心,打分低于平均分的是负的数,高于平均分为正数。

            image.gif编辑

            image.gif编辑

            07 化妆品网站的推荐例子 (找相似的物item-based)

            记得我之前说,

            "

            找相似,可以是找相似的人,也可以找相似的东西。

            比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;

            找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似呀。

            image.gif编辑

            上面那个例子就是找相似的人,现在我们说下找相似的东西。

            有一天,小美又上网闲逛了,她买过也评分过润肤露,眼影,香水,睫毛膏,这次只剩下口红和粉饼没有买,那下一个该推荐给她口红呢,还是粉饼呢?

            image.gif编辑

            根据之前的顺序,我们算出化妆品之间的相似性,步骤也是先填平均值->标准化->算cos相似度值->挑出几个和目标物体相似的物体-> 结合物品打分和物品相似值,综合打分->挑出分数高的推荐给小美。

            这样,我们算出,

              • 和口红最接近的是润肤露和睫毛膏;
              • 和粉饼最接近的是眼影和香水。

              根据小美打过其他产品的分数,以及这些产品和口红、粉饼相似度,我们算出:

                • 小美给口红打分: (0.41 * 2 + 0.59 * 3)/(0.41+0.59) = 2.6
                • 小美给粉饼打分: (0.47 * 5 + 0.40 * 4)/(0.47+0.40) = 4.5


                  image.gif编辑

                粉饼大于口红,我们推荐粉饼给小美。

                image.gif编辑

                08 人人相似和物物相似的推荐哪个更好

                现实生活中,其实两个都有在用。但是物物相似更常用一点。因为每个人都有自己的喜好,用的不当心,容易产生反感。

                比如一个男孩子买了啤酒,薯片。一个女孩子买了口红,啤酒,薯片。根据计算,男孩和女孩很相似,然后推荐口红给男孩。看起来,是不是很奇怪呀?但是如果你规则定的好,人人相似,也会有很好的效果。

                推荐系统里的协同过滤就是这么简单,最后你们能猜出亚马逊给我推荐东西的背后,用的是人人相似,还是物物相似吗?

                目录
                相关文章
                |
                3月前
                |
                搜索推荐 前端开发 数据可视化
                【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
                本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
                142 1
                |
                5月前
                |
                搜索推荐 算法 小程序
                基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
                基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
                |
                5月前
                |
                搜索推荐 算法 小程序
                基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
                基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
                |
                3月前
                |
                搜索推荐 前端开发 数据可视化
                基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
                本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
                260 9
                基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
                |
                3月前
                |
                搜索推荐 前端开发 算法
                基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
                本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
                229 7
                基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
                |
                6月前
                |
                搜索推荐 算法 前端开发
                美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
                美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
                189 4
                美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
                |
                5月前
                |
                机器学习/深度学习 搜索推荐 算法
                基于深度学习神经网络协同过滤模型(NCF)的图书推荐系统
                登录注册 热门图书 图书分类 图书推荐 借阅图书 购物图书 个人中心 可视化大屏 后台管理
                13122 2
                基于深度学习神经网络协同过滤模型(NCF)的图书推荐系统
                |
                4月前
                |
                JavaScript Java 测试技术
                基于springboot+vue.js+uniapp小程序的协同过滤电影推荐系统附带文章源码部署视频讲解等
                基于springboot+vue.js+uniapp小程序的协同过滤电影推荐系统附带文章源码部署视频讲解等
                45 0
                |
                6月前
                |
                机器学习/深度学习 搜索推荐 算法
                推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
                推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
                613 1
                |
                5月前
                |
                搜索推荐 算法 前端开发
                计算机Java项目|基于协同过滤算法的体育商品推荐系统
                计算机Java项目|基于协同过滤算法的体育商品推荐系统

                热门文章

                最新文章