推荐系统

这个博客我们讨论一个有用的算法,也就是大家感兴趣的能变现的算法----推荐算法。
现在,当我们浏览网页的时候,服务器都会记录用户的行为,来分析我们的喜好并且推荐相关的信息。

举个例子吧,电影评分~~~

假设,我们运营了一家视频点播网站,就类似爱奇艺、优酷。在这种网站里面,用户会对电影、电视剧等的进行评分,
一般都是1星到 5 星的。觉得好看就给五星,觉得不好看就给 1 星之类的。而且这个评分对于这种网站而言还都挺重要
的。

我们列出了五部电影,如上图。同时,我们有四个用户,将它们分别编号成1,2,3,4。
那么这些都是我们的数据,为了能够更好地表达我们这里的这个问题,我们需要引入一些符号。
我们的数据主要是两类:爱情片和动作片,然后两类用户,如上图。
那么推荐系统的问题定义就是,给定了这样的数据 r(i,j) 和 y(i,j),我们需要对于所有这些没有被评价的电影(上图?)
预测特定用户对于特定电影的评分可能是多少。在这个例子中,我们的样本很少——电影只有五部,用户只有四位,
而且大多数用户都对大多数电影进行了评分,不过在实际中,每个用户可能只对一小部分电影进行过评价,毕竟作为
一家视频网站,我们一定会有非常多的影片,而我们的任何一个特定的用户都只能看过其中一小部分。

所以,需要开发一个推荐系统,能够自动地帮我们把这里面的缺失值填补起来,这样我们就可以看看用户还没有看过
哪些电影,然后根据我们预测的评分来为用户进行推荐。也就是我们需要预测用户感兴趣的电影,然后把这些电影推
荐给用户。

如何开发推荐算法?

基于内容推荐


基于内容的推荐:
对于我们之前的数据集。要怎么预测(?)的值是多少呢?我们假设对于每一部电影,我们有关于它们的一些特征。
比如说,每个电影都有两个特征(爱情/动作)。那么,每一部电影就都可以表示成一个向量。
为了做出预测,我们可以针对每一个用户,把它对不同元素的电影的评分看作是一个独立的线性回归问题。
所以,我们就需要对每一个用户计算出它们对电影特征的喜好程度,也就是做一次线性回归,这样我们就可以了解每
一个用户对不同电影元素的喜好程度,那么对于用户没有看过的影片,我们只需要简单地计算一下电影元素及用户喜
好程度的内积就可以预测出用户对这部电影的评分。


求用户电影权重参数的过程,如上图,参考监督学习。
基于内容的推荐算法,实际上跟我们已经讨论过的监督学习算法中的线性回归本质上是一样的,在这里我们同样有
特征数据,也有标注数据,也就是用户对看过电影的评分,要做的也是对于用户没有看过的电影进行评分预测。不
过这里面有一个很重要的假设,那就是我们对电影能够很好地抽取出一些能够表现用户喜好的特征元素,比如我们
例子中说的爱情元素以及动作元素。但实际上,这种电影的特征一般都很难提取。怎么办呢?

协同过滤

基于上述问题,我们来讨论一种不太需要构建特征的一种推荐算法,这种算法----”协同过滤”。

这里是我们电影评分数据集。我们先前假设对于每部影片,都有两个特征来表示电影的爱情因素和动作因素的强度,
我们需要找人来对这些影片进行标注才能获得这些特征。当然,这样做必然会耗费很多的人力物力,也很费时间。而
且通常,我们除了想要有这两个特征,可能还会想要更多其他的特征。所以,如果靠人来对这些数据进行标注以得到
特征的话,几乎是不可能的。

那么,我们稍微改变一下解决这个问题的思路。例如,有一个数据集,不知道它们的特征值。比如,这里的数据,我
们知道用户对于一些电影的评分,但是我们对于这些电影可能一无所知,我们不知道这些电影有多浪漫,也不知道这
些电影有多少动作成分。所以,我们这里把电影的所有特征都表上问号。
稍稍改变一下我们原先的假设,比如现在我们对用户进行了访谈,得到了用户对于爱情元素和动作元素的喜爱程度(
就是电影特征参数 θ1, θ2...)。
这样,对于每一个用户 j,我们都知道他对不同电影元素的喜好程度,这样,我们其实就可以推算出每一部电影的爱情
特征取值大约是多少,动作特征取值大约是多少,不关心电影名,只知道谁喜欢这部电影,谁不喜欢。而且我们也知道
每个人对不同特征的喜好程度,那么就可以大致推断出电影在不同特征上的强度了。所以对于x(1),x1可能就是1,x2
就是0。

之前讨论了基于内容的推荐,刚才又讨论了如何根据用户喜好来预测电影的特征。那么我们将二者结合起来就可以得到
一个全新的算法。
这就是协同过滤的最基本的算法。
协同过滤,通俗讲就是,当我们执行这个算法的时候,我们通过一群用户得到的数据,这些用户实际上在高效地进行了
协同合作,只要用户对电影进行评分,那么他实际上就是在帮助算法更好地学习出电影的特征,经过几次对电影的评分,
那么系统也就会更加清楚用户的偏好,这样就产生了一个良性的循环,使得整个系统对用户推荐的影片越来越好,同时
也使得对用户的喜好刻画得越精确。

在没有电影特征信息及用户对电影特征喜好程度信息的情况下,怎么去自动地去学习这两组数据?


我们可以先随机初始化x,然后求出一个θ,然后再求x,然后再求θ,这样循环往复,迭代式地做。实际上,我们可以
有更加高效地算法,让我们不需要不断地来回迭代式地求解θ和x。而是可以同时把θ和x求出来。
简单地说,我们要做的其实就是把两个目标函数放在一起,然后同时求解x和θ。所以,我们定义了J函数,如上图。它
依然是一个代价函数,它的参数是我们的特征x以及参数θ,它本质上就是上面两个目标优化函数的和。

新定义的J,如果保持x不变,最小化θ,就是第一个式子;如果保持θ不变,求解x,就是第二个式子。


这就是协同过滤算法。当然,在现实使用地推荐系统中,还有非常多地其他细节,而不仅仅是按照我们这种做法就可以
完全可以胜任一个商业化的推荐系统。但对于推荐而言,我们这里讨论的协同过滤是一种基础、经典的算法。它给我们
最大的启发在于,我们在应对某些问题的时候,即使在没有特征的时候也可以开展工作,我们可以利用仅有的用户对影
片的评分就估计出影片的特征以及用户对于特征的喜好程度

低秩矩阵分解

如何向量化地来实现协同过滤?
我们也讨论一下,利用学习出来的电影特征,我们怎么找到跟某部电影最相似的其他电影。

均值标准化


为什么要在推荐算法中使用均值标准化?
我们来考虑一个这样的例子:我们有一个用户,他没有对任何一部影片评分,那么加上我们之前的四位用户——张三、
李四、王二、麻子。我们现在增加了一个用户,刘五,他对任何一部影片都没有评过分。我么来看看在这种情况下,
协同过滤算法会对这个用户做什么?
他对每部电影的评分都是0,这似乎不太合理。

为了解决这种问题,均值标准化。
我们首先要做的就是,计算每一部影片的平均得分,我们把它存在一个新的向量μ中。所以,第一部影片,有两位用
户打了5分,两位打了0分,所以它的平均评分是2.5分。同样第二部电影也是2.5分,这么一直下去,最后一部的平均
分是1.25。
那么,接下来,我们会将用户的评分,全部减去对应影片的平均得分。
这样做了以后,每部电影的评分的均值就变成了0。
那么再接下来,使用这个均值标准化以后的数据来进行协同过滤,也就是我们不再使用原始的用户评分数据来学习电
影的特征和用户喜好的参数,而是用这个新的数据来学习参数θ和特征x。

本质上就是对于没有信息的用户,用平均分来推荐

协同过滤就讲完了~~~

[Python嗯~机器学习]---机器学习推荐系统简述相关推荐

  1. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战

    本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...

  2. 【免费学习半个月】强烈推荐你学习这个《机器学习与推荐系统实训强化课》...

    前几天,我给朋友推荐一个课程,跟他说认真学能拿到头条offer,一开始还说我吹牛,看完介绍,结果直接就报名了.就是下面这个 <机器学习与推荐系统实训强化课> 「Machine Learni ...

  3. 想拿头条百度39W年薪算法offer?推荐你学这个机器学习与推荐系统项目实训强化课...

    前几天,我向朋友推荐这个课程. 跟他说,学完能拿大厂机器学习.推荐系统算法方向的offer.结果他看完介绍,直接就报名了. 这个课程是BAT P8级别团队Leader全程亲自授课:并精选多个工业级机器 ...

  4. 基于python的数据建模与分析案例_基于案例详解Python数据分析与机器学习

    课程概述: 使用数据领域最主流语言Python及其分析与建模库作为核心武器.对于机器学习经典算法给出完整的原理推导并基于实例进行讲解,基于案例演示如何应用机器学习算法解决实际问题. 课程特色: 通俗易 ...

  5. 如何在 Python 中开始机器学习?(小白必看)

    其实学习机器学习的最好方法是设计和完成小项目. Python 是一种流行且功能强大的解释型语言.与 R 不同,Python 是一种完整的语言和平台,可用于研究和开发以及开发生产系统. 还有很多模块和库 ...

  6. python手动将机器学习模型保存为json文件

    python手动将机器学习模型保存为json文件 # 导入需要的包和库: # Import Required packages #-------------------------# Import t ...

  7. 数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全

    数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全 Learn, compete, hack and get hired! 学习.竞争.精进.996. 东西永远学不完 ...

  8. 带你入门Python数据挖掘与机器学习(附代码、实例)

    作者:韦玮 来源:Python爱好者社区 本文共7800字,建议阅读10+分钟. 本文结合代码实例待你上手python数据挖掘和机器学习技术. 本文包含了五个知识点: 1. 数据挖掘与机器学习技术简介 ...

  9. 机器学习与推荐系统实践

    https://www.toutiao.com/a6641861834074751495/ 2019-01-02 19:36:05 配套PPT下载,请关注公众号"智能推荐系统",后 ...

  10. 干货丨机器学习必备:前20名Python人工智能和机器学习开源项目

    如今机器学习和人工智能已经变得家喻户晓,有很多爱好者进入了该领域.但是,什么才是能够进入该领域的正确路径呢?如何保持自己跟上该领域的发展步伐呢? 为了解决以上两个问题,可以通过利用高级专业人员每天使用 ...

最新文章

  1. axios解决调用后端接口跨域问题
  2. 使用C#程序处理PowerPoint文件中的字符串
  3. discussion function on the github system
  4. [maven]maven插件 tomcat7-maven-plugin 的使用
  5. linq中给字段添加别名
  6. python3 os模块相关方法
  7. vue设置textarea最大字数_【Vue 学习】 Vue常用系统指令
  8. java中断异常_Java中断异常 InterruptedException 的正确处理方式
  9. 自动驾驶帆船,有史以来第一次成功横渡大西洋
  10. windows进程 windows多进程编程
  11. 目前计算机新技术应用领域,计算机的应用领域分为哪六个方面
  12. android 图片虚化代码,Android模糊图片技术
  13. 螃蟹保存方法保存时间_活面包蟹怎么保存?面包蟹能保存多久
  14. opencv05:图像的基本操作
  15. 20050620 GNU Bison 中文手册翻译完成
  16. 转:安迪·格鲁夫:你无法避免开会,但可以让它更有效率
  17. KepServer如何和欧姆龙NJ系列通讯并进行字符串读取
  18. flutter FijkPlayer seekTo的不准确问题
  19. linux—jock
  20. Linux中常见软件安装方法及常见管理方法

热门文章

  1. opencv图像特效之油画特效
  2. java在线考试系统源码网上考试系统源码在线考试系统(考试管理系统)考试系统
  3. HTML图片标签及相关超链接
  4. python 基础代谢率计算_Python的学习笔记案例3--基础代谢率计算4.0
  5. 论文写作可以参考的Things~
  6. ASP.net:关于何种情况下使用DataGrid、DataList或Repeater
  7. uniapp之H5网站添加图标favicon浏览器标签栏小图标
  8. 车辆动力学模型知识总结(一):坐标系
  9. 粮油机械展2023全国粮机展会6月9日广州召开
  10. 台式计算机的红外端口在哪,个人台式机里有蓝牙或者红外吗?