推荐算法: 相似性推荐(没有用户历史行为数据的推荐)

前几天和老板通俗的介绍了协同过滤(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)由于没有用户历史行为积累,不是个性化推荐,所以所有用户的推荐结果都是相同的;
(2)一般来说,距离公式确实是线性的
(3)一般来说,每个维度的权重不一样
(4)这个线性公式,以及维度的权重,都可以通过机器学习训练出来;
 
相似性推荐原理如上,希望这1分钟,大家没浪费。

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5768

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月10日 下午10:16
下一篇 2022年5月10日 下午10:17

相关推荐

  • 互联网分层架构,为啥要前后端分离?

    有水友在评论中留言问我: 沈老师,我在一家创业公司,大概有20人左右的研发团队。   团队正在推进前后端分离,我觉得架构变得复杂了,项目研发周期变长了,但组长说,互联网公司都在搞前后端分离,所以我们也要搞。   我还是不理解,为什么要进行前后端分离呀? 今天,简单说说,互联网分层架构里的前后端分离。 画外音:“别人在搞xxoo技术”一定不能成为,一家公司推动...

    2022年5月14日
    2700
  • PHP 魔方加密二代 解密

    0x00 前言 洪哥给我一个加密的PHP代码,问我有没有办法搞出来,没有接触过PHP混淆加密,百度了一下加密特征,使用的是魔方二代加密方法。 从52破解上找了一个魔方二代加密反编译代码对加密的PHP代码进行解密,记录一下过程   [调试逆向] PHP解密:魔方加密2代 全自动反编译器 汇编这块看不懂,直接拉到最下面,大佬给出了反编译代码 PHP m...

    技术 2022年6月13日
    4700
  • 我去,拷贝代码,居然还有这等好处?

    什么是耦合?耦合,是架构中,本来不相干的代码、模块、服务、系统因为某些原因联系在一起,各自独立性差,影响则相互影响,变动则相互变动的一种架构状态。感官上,怎么发现系统中的耦合?作为技术人,每每在心中骂上下游,骂兄弟部门,“这个东西跟我有什么关系?为什么需要我来配合做这个事情?”。明明不应该联动,却要被动配合,就可能有潜在的耦合。  因为公共库,导致相互受影响...

    技术 2022年5月11日
    1500
  • PHP编程基础学习记录

    印象笔记中躺着一篇当时学PHP的一篇笔记,贴出来,从慕课网上学的 PHP官方手册 看代码还是直接查手册吧   PHP 运行在服务端、跨平台、脚本语言、免费 代码标识 1 2 3 1 2 3 4 5 6 7 8 9 10 11 例子: A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务...

    技术 2022年6月13日
    3500
  • Redis为什么又引入了多线程?难道作者也逃不过“真香定理”?

    相信你一定不止一次见过Redis是单线程模式,不过说实话那只是个老版本,这个问题是一位老哥的大厂面试题,跟我分享了一下。想着自己就知道redis6.0以前一直都是单线程,到了6的版本才加入了多线程,还不是很清楚,在多方打听并且搜索之下总结了这篇文章。 一、问题概述 Redis 6.0 之后的版本抛弃了单线程模型这一设计,原本使用单线程运行的 Redis 也开...

    2022年4月1日
    2000

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信