机器学习12推荐系统

推荐系统(Recommender Systems) 

推荐系统根据浏览用户过去买过什么书,或过去评价过什么电影来判断并推荐新产品给用户。

这些系统会为像亚马逊和网飞这样的公司带来很大一部分收入。

因此,对推荐系统性能的改善,将对这些企业的有实质性和直接的影响。


对机器学习来说,特征是很重要的,你所选择的特征,将对你学习算法的性能有很大的影响。因此,在机器学习中有一种大思想,它针对一些问题,可能并不是所有的问题,而是一些问题,有算法可以为你自动学习一套好的特征。推荐系统就是一个例子。


例子: 我们有 5 部电影和 4 个用户, 我们要求用户为电影打分。  




基于内容的推荐系统(Content Based Recommendations)

在一个基于内容的推荐系统算法中,假设对于希望推荐的东西有一些数据,这些数据是有关这些东西的特征。

在例子中,假设每部电影都有两个特征,如 x1代表浪漫程度,x2 代表动作程度。


下面我们要基于这些特征来构建一个推荐系统算法。 

假设我们采用线性回归模型,可以针对每一个用户都训练一个线性回归模型。



代价函数:



上面的代价函数只是针对一个用户的, 为了学习所有用户, 我们将所有用户的代价函数求和



如果要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:




在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。

相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。


首先,用户要对拥有特征的电影进行评分,此时就可以学习出用户的偏好参数。

之后,上线新电影时,用户对其观看并打分,此时针对这个新电影,就可以根据用户的偏好参数来自动学习出电影的特征。

—————————————————————————————————————————————————————————


协同过滤(Collaborative Filtering)

但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。

协同过滤算法可以同时学习这两者。

优化目标改为同时针对 x 和 θ 进行:


对代价函数求偏导数的结果如下:


注:在协同过滤从算法中,我们通常不使用bias项,如果需要的话,算法会自动学得。  


协同过滤算法使用步骤如下:



对于电影 x(i)和另一电影 x(j),依据两部电影特征向量之间的距离 ||x(i)-x(j)|| 的大小,可以判断它们是否为同一类电影。


小结:



—————————————————————————————————————————————————————————


举例子:  

1.当给出一件产品时,你能否找到与之相关的其它产品。 

2.一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。 


我将要做的是:实现一种选择的方法,写出协同过滤算法的预测情况。
 

我们有关于五部电影的数据集,我将要做的是,将这些用户的电影评分,进行分组并存到一个矩阵中。 

我们有五部电影,以及四位用户,那么这个矩阵 Y 就是一个 5 行 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里:


推出评分:


找到相关影片:



现在既然你已经对特征参数向量进行了学习,那么我们就会有一个很方便的方法来度量两部电影之间的相似性。

例如说:电影 i 有一个特征向量 x(i),你是否能找到一部不同的电影 j,保证两部电影的特征向量之间的距离 x(i)和 x(j)很小,那就能很有力地表明电影 i 和电影 j 在某种程度上有相似,至少在某种意义上,某些人喜欢电影 i,或许更有可能也对电影 j 感兴趣。 

总结一下, 当用户在看某部电影 i 的时候,如果你想找 5 部与电影非常相似的电影,为了能给用户推荐 5 部新电影,你需要做的是找出电影 j,在这些不同的电影中与我们要找的电影 i 的距离最小,这样你就能给你的用户推荐几部不同的电影了。 

通过这个方法, 希望你能知道, 如何进行一个向量化的计算来对所有的用户和所有的电影进行评分计算。 同时希望你也能掌握, 通过学习特征参数, 来找到相关电影和产品的方法。



实现细节:均值归一(Implementational Detail_ Mean Normalization)



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

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

相关文章

使用Apriori进行关联分析(二)

使用Apriori进行关联分析(二)书接上文(使用Apriori进行关联分析(一)),介绍如何挖掘关联规则。发现关联规则我们的目标是通过频繁项集挖掘到隐藏的关联规则。所谓关联规则,指通过某个…

Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPool

Apache Tomcat 7 Configuration Reference (7.0.93) - The Executor (thread pool)https://tomcat.apache.org/tomcat-7.0-doc/config/executor.html Tomat组件研究之ThreadPool - 老码农的专栏 - CSDN博客https://blog.csdn.net/chen77716/article/details/344764 Tomcat中的线…

数学笔记3——导数3(隐函数的导数)

数学笔记3——导数3(隐函数的导数)幂函数的扩展形式f(x) xn的导数:f’(x) nxn-1,n是整数,该公式对f(x) xm/n, m,n 是整数同样适用。推导过程:什么是隐函数引自知乎:“如果方程F(x,y)0能确定y…

机器学习13大规模数据集

大型数据集的学习(Learning With Large Datasets) 如果我们有一个低方差的模型, 增加数据集的规模可以帮助你获得更好的结果。 我们应该怎样应对一个有 100 万条记录的训练集? 以线性回归模型为例,每一次梯度下降…

svn认证失败,解决方案

在svnserve.conf:文件中去掉authz-db authz前面的#号,会出现的认证失败。 造成此原因的主要问题就是authz文件中权限没有配置好。 例如: 创建prj1库 svnadmin create prj1 修改配置文件 svnserve.conf: [general] anon-access read auth-access write…

Python机器学习库sklearn的安装

Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以让用户简单、高效地进行数据挖掘和数据分析。 Ubuntu14.04系统上安装 安装num…

Java07多线程

14 多线程 操作系统的多任务(multitasking):在同一时刻运行多个程序的能力。 多线程在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。 通常,每一个任务称为一个线程(tread)&…

MySQL字段拼接Concat

有时候,从数据库中拿出的数据并不是我们想要的格式,比如,有以下的vendors表 如果,想以 name (location)的格式展现出来,那么就要用到MySQL的Concat了。 Concat()拼接串,即把多个串连接起来形成一个较长的串…

使用pycharm调用模块后字体变灰 是什么原因呢?

使用pycharm调用模块后字体变灰 是什么原因呢?点击小灯泡提示出现以下内容:This inspection detects names that should resolve but dont. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-l…

操作系统01概述

第一章 概论 《Operating System Internals and Design Principles》 《Applied Operating System Concepts》 操作系统——裸机上的第一层软件,它是对硬件系统功能的首次扩充,填补人与机器之间的鸿沟。 1.1 操作系统与计算机同在 1.2 对操作系统的…

CNN训练模型 花卉

一、CNN训练模型 模型尺寸分析:卷积层全都采用了补0,所以经过卷积层长和宽不变,只有深度加深。池化层全都没有补0,所以经过池化层长和宽均减小,深度不变。http://download.tensorflow.org/example_images/flower_photo…

Linux re

正则表达式并不是一个工具程序,而是一个字符串处理的标准依据,如果想要以正则表达式的方式处理字符串,就得使用支持正则表达式的工具,例如grep、vi、sed、asw等。 注意:ls不支持正则表达式。 grep 正则表达式: 注意gr…

操作系统02进程管理Process_Description_and_Control

作业的基本概念:用户再一次计算过程中或一次事务处理过程中,要求计算机系统所做的工作的集合。 包含多个程序、多个数据、作业控制说明书 系统调用时操作系统提供给编程人员的唯一接口。 1、文件操作类; 2、进程控制类; 3、资…

蓝桥杯 方格填数(全排列+图形补齐)

方格填数 如下的10个格子 填入0~9的数字,同一数字不能重复填。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。注意:你提交的应该是一个…

操作系统03进程管理Process_Scheduling

2 Process Scheduling >Type of scheduling >Scheduling Criteria (准则) >Scheduling Algorithm >Real-Time Scheduling (嵌入式系统) 2.1 Learning Objectives By the end of this lecture you should be able to Explain what is Response Time 响应时间-…

花卉分类CNN

tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍微有些简化。 任务:花卉分类 版本:tensorflow 1.3 数据:http://download.tensorflow.org/example_images/f…

【模板】可持久化线段树

可持久化线段树/主席树: 顾名思义,该数据结构是可以访问历史版本的线段树。用于解决需要查询历史信息的区间问题。 在功能与时间复杂度上与开n棵线段树无异,然而空间复杂度从$O(n\times nlogn)$降到了$O(nlogn)$。 实现方法: 每次…

skimage库需要依赖 numpy+mkl 和scipy

skimage库需要依赖 numpymkl 和scipy1、打开运行,输入cmd回车,输入python回车,查看python版本2、在https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 中,根据自己python版本下载需要的包 (因为我的是python 2.7.13 …

操作系统04进程同步与通信

4.1 进程间的相互作用 4.1.1 进程间的联系资源共享关系相互合作关系临界资源应互斥访问。临界区:不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它们进行访问。把在每个进程中访问临界资源的那段代码称为临界资源区。显然&#x…

oracle迁移到greenplum的方案

oracle数据库是一种关系型数据库管理系统,在数据库领域一直处于领先的地位,适合于大型项目的开发;银行、电信、电商、金融等各领域都大量使用Oracle数据库。 greenplum是一款开源的分布式数据库存储解决方案,主要关注数据仓库和BI…