1分钟了解相似性推荐

转载自 1分钟了解相似性推荐

前几天聊的“协同过滤Collaborative Filtering”和“基于内容的推荐Content-based Recommendation”,都必须分析用户的历史行为数据(例如电影点击数据,职位查看数据等),针对不同的用户进行个性化推荐。如果系统没有用户的历史行为数据积累,如何实施推荐呢?

 

今天接着用通俗的语言说说推荐算法中的“相似性推荐”。

 

什么是“相似性推荐”?

:对于新用户A,没有ta的历史行为数据,在ta点击了item-X的场景下,可以将与item-X最相似的item集合推荐给新用户A

 

问题转化为,如何用一种通用的方法,表达item之间的相似性。

 

仍以电影推荐为例,新用户A进入了《我不是潘金莲》电影详情页,如何对A进行电影推荐呢?

 

先看二维空间的点N,如何推荐与其最近的点?

:可以用二维空间中,点与点之间的距离,表示点之间的远近。


对于全集中的任何一个点M(xi, yi),它与点N(x1, y1)的距离:

distance = (x1-xi)^2 + (y1-yi)^2

所以,只要计算全集中所有点与N的距离,就能计算出与它最近的3个点。

 

再看三维空间的点N,如何推荐与其最近的点?

:可以用三维空间中,点与点之间的距离,表示点之间的远近。


对于全集中的任何一个点M(xi, yi, zi),它与点N(x1, y1, z1)的距离:

distance = (x1-xi)^2 + (y1-yi)^2 + (z1-zi)^2

所以,只要计算全集中所有点与N的距离,就能计算出与它最近的3个点。

 

循序渐进,对于一部电影《我不是潘金莲》,假设它有10个属性,则可以把它看做一个十维空间中的点

N《我不是潘金莲》

{

导演:冯小刚

女主:范冰冰

男主:郭涛

女配:张嘉译

男配:大鹏

类型:剧情

地区:中国大陆

语言:普通话

日期:2016

片长:140

}

 

对于电影全集中的任何一部电影,都可以计算与点N《我不是潘金莲》之间的距离。二维三维中的点,可以用直线距离计算远近,10维空间{导演女主男主女配男配类型地区语言日期片长}中的两个点的距离,需要重新定义一个距离函数,例如:

distance = f1(导演) + f2(女主) + … +f10(片长)

这个距离,通俗的解释,就是每个维度贡献分值的总和。

 

分值可以这么定义:

f1(导演){

         如果两部电影导演相同,得1;

         如果导演不同,得0;

}

 

例如,现在10维空间中,有另一个点M《芳华》

{

导演:冯小刚

女主:苗苗

男主:黄轩

女配:NULL

男配:NULL

类型:剧情

地区:中国大陆

语言:普通话

日期:2017

片长:140

}

 

要计算点M《芳华》与点N《我不是潘金莲》的距离,代入distance距离计算公式:

distance = f1(导演) + f2(女主) + … +f10(片长)

         =1 + 0 + … + 1

         =5

即:导演、类型、地区、语言、片长相同各得1分,其他维度不同得0分。

 

遍历电影全集中的10w部电影,就能找到与点N《我不是潘金莲》最相近的3部电影,当用户点击《我不是潘金莲》的详情页时,直接推荐这3部最相近的电影即可。

 

相似性推荐,原理大致如上,要说明的是:

  • 由于没有用户历史行为积累,不是个性化推荐,所以所有用户的推荐结果都是相同的

  • 一般来说,距离公式确实是线性的

  • 一般来说,每个维度的权重不一样

  • 这个线性公式,以及维度的权重,都可以通过机器学习训练出来

 

相似性推荐,希望这1分钟,大家能有收获。


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

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

相关文章

mybatis_user_guide(6) Java API

【0】README1)本文全文总结于 http://www.mybatis.org/mybatis-3/zh/java-api.html【1】SqlSessions1)intro: 我们知道, SqlSessionFactoryBuilder 创建 SqlSessionFactory , SqlSessionFactory 创建 SqlSession,然后…

hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法

1 当使用left join左连连接&#xff0c;sql语句为 select t from SecondPage t left join t.rightNavbar n where 11 页面中出现了部分空行的情况&#xff0c;上述语句返回的list集合为 DataGrid dataGrid new DataGrid(); List<SecondPage> listsecondPageDao.find(…

1分钟了解基于内容的推荐,pm又懂了

转载自 1分钟了解基于内容的推荐&#xff0c;pm又懂了什么是基于内容的推荐&#xff08;Content-based Recommendation&#xff09;&#xff1f; 答&#xff1a;通过用户历史感兴趣的信息&#xff0c;抽象信息内容共性&#xff0c;根据内容共性推荐其他信息。比如&#xff0c;如…

mybatis_user_guide(7) SQL语句构建器类

【0】README1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/statement-builders.html【1】在Java代码中来动态生成SQL代码就是一场噩梦1&#xff09;problemsolutions&#xff1a;1.1&#xff09;problem&#xff1a;Java程序员面对的最痛苦的事情之一就是…

datagrid获取页面总记录数的方法,datagrid获取页面总记录数为0的解决方法

1 在网上查了一大堆博客&#xff0c;都只有下面这一段&#xff0c;也不知道这些人有没有测试 var data$(#tt).datagrid(getData); alert(总数据量:data.total)//注意你的数据源一定要定义了total&#xff0c;要不会为undefined&#xff0c;datagrid分页就是靠这个total定义 al…

1分钟了解协同过滤,pm都懂了

转载自 1分钟了解协同过滤&#xff0c;pm都懂了工程架构方向的程序员&#xff0c;看到推荐/搜索/广告等和算法相关的技术&#xff0c;心中或多或少有一丝胆怯。但认真研究之后&#xff0c;发现其实没有这么难。今天的1分钟系列&#xff0c;给大家介绍下推荐系统中的“协同过滤”…

mybatis_user_guide(8) 日志

【0】README 1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/logging.html 2&#xff09;Mybatis内置的日志工厂提供日志功能&#xff0c;具体的日志实现有以下几种工具&#xff1a; SLF4JApache Commons LoggingLog4j 2Log4jJDK logging 3&#xff09;具体…

hibernate在saveOrUpdate时,update报错:a different object with the same identifier value was already assoc

1 原因&#xff1a;网上说是&#xff0c;在hibernate中同一个session里面有了两个相同标识但是是不同实体。 2 我找出的解决方法是&#xff1a; getSession().clear(); //在dao层把session清理一下 3 网上查找出还有其他解决方法&#xff0c;其中 getSession().merge(arg0…

1分钟了解区块链的本质

转载自 1分钟了解区块链的本质区块链&#xff0c;比特币这些概念最近都很火&#xff0c;但很多人搞不清楚它究竟是啥&#xff0c;准备从技术的角度&#xff0c;从架构的角度&#xff0c;用通俗的语言谈谈楼主的理解。究竟啥是区块链&#xff1f;答&#xff1a;一句话&#xff0…

maven(7)生命周期和插件

【0】README1&#xff09;本文部分文字转自 “maven实战”&#xff0c;旨在 review “maven(7)生命周期和插件” 的相关知识&#xff1b;2&#xff09;maven 另外两个核心概念是生命周期和插件&#xff1a;maven的生命周期是抽象的&#xff0c;其实际行为都由插件来完成&#…

datagrid的文字换行与连续字符串换行处理,字符串三种截取方式

1 文字自动换行&#xff1a;nowrap:false 2 当时字符串&#xff0c;比如email这样的字段时&#xff0c;就需要用到字符串的拼接&#xff0c;首先&#xff0c;先贴出我解决问题的方法&#xff0c;再介绍字符串的三种拼接方式&#xff1a; 我解决问题的方法&#xff1a; {titl…

1分钟了解“区块链分叉”的本质

转载自 1分钟了解“区块链分叉”的本质 有不少朋友问&#xff0c;全球每个区块链节点都包含全部数据&#xff0c;都在最新的区块链数据上挖符合条件的区块&#xff0c;如何两个节点同时挖到新区块&#xff0c;出现数据不一致&#xff0c;该怎么办呢&#xff1f; 今天&#xff0…

sql server数据库:创建数据库、建立数据库用户、为用户赋予权限

1 使用sql创建数据库 use test go create database test2 on primary (nametest2_data, -- 主文件逻辑名filenameD:\DataSqlserver\test2_data.mdf,--物理路径size5MB,filegrowth15% ) log on (nametest2_log,filenameD:\DataSqlserver\test2_log.ldf, --日志物理文件名size…

review_core_basic_java(1)java程序设计概述

【0】README1&#xff09;本文部分文字描述转自 “core java volume 1” 旨在review “review_core_basic_java(1)java程序设计概述” 的相关知识&#xff1b;【1】 java 程序设计平台 【2】 java 白皮书的关键术语0&#xff09;intro&#xff1a;java的设计者编写了颇有影响力…

全球如何保证区块生成是匀速的?

转载自 全球如何保证区块生成是匀速的&#xff1f; 区块链有个特点&#xff1a;虽然大家都在采矿&#xff0c;但挖到矿的速度是均匀的。以承载比特币的区块链为例&#xff0c;平均每10分钟产出一个区块&#xff0c;这个速度基本是不变的。 有朋友就有疑问了&#xff0c;计算能力…

hibernate关联映射:多对一、一对一

配置对象关联关系 - 单向一对多关系 - 例如&#xff1a;班级与学生 Grade类中 public class Grade{private int gid;private String gname;private String gdesc;private Set student new HashSet();//set实现班级与学生的一对多关系 } Grade.hbm.xml中 <hibernate-m…

dom4j-cookbook

【0】README1&#xff09;本文译自http://dom4j.sourceforge.net/dom4j-1.6.1/cookbook.html 2&#xff09;intro&#xff1a; 2.1&#xff09;dom4j 是一个对象模型&#xff0c;在内存中表示一颗XML 树。dom4j 提供了易于使用的API以提供强大的处理特性&#xff0c;操纵或控制…

Spring 整合 Quartz 分布式调度

转载自 Spring 整合 Quartz 分布式调度本文旨在对 SpringQuartz 分布式调度有一个直观的了解&#xff0c;通过实际的使用来解决问题。前言为了保证应用的高可用和高并发性&#xff0c;一般都会部署多个节点&#xff1b;对于定时任务&#xff0c;如果每个节点都执行自己的定时任…

使用vo注释做一个poi导出功能

1 jsp中&#xff1a; <a href"${basePath}/manage/bulletinAction.do?methodexportMainProduct&is18th1">导出公司主营产品</a> 2 action中&#xff1a; /*** 导出主营产品*/public void exportMainProduct(ActionMapping mapping, ActionForm fo…

java_basic_review(5) java继承

【0】README1&#xff09;本文主要对 java 继承的一些 重点知识进行复习&#xff1b;2&#xff09;for source code&#xff0c; please visit java_basic_review(5)源代码3&#xff09; proj dir tree【1】super 和 this 的比较1&#xff09;this的用途&#xff1a;一是引用隐…