透过数据,横看成岭侧成峰

简介:
本文是《 距离有多远?欧几里德距离&皮尔逊相关度系数 》的续篇,继续讨论推荐评论,推荐电影,电影相似度的话题.

推荐评论

同一部电影有那么多的评论者 , 到底看谁的评论呢 ? 上文我们已经计算出来了用户之间的距离 ( 相似度 ), 很明显 , 看和自己距离最近的那一个用户写的评论就可以了 . 我们需要对已经算出来的相似度做一个排序 :
Code
ejuli  

推荐电影

      上面帮我找到一篇符合自己口味的评论,下面我们要讨论一下如何推荐商品.我们当然可以有以下简单而武断的处理方式:从和自己相似度最高的用户看过的且评价很高的电影中给出推荐.如果这个相似度很高的有什么特殊的爱好,推荐的结果就不能让人满意了:比如有一群和我一样喜欢香港武侠电影的人,通过我的电影列表给他们推荐电影,大部分情况下的推荐都是准确的,可是我却给《金鸡》满分.或者有一部电影很好这个用户却没有评价,也会被漏掉:比如《导火线》我就是因为讨厌其中的一个女演员没有看,在给其他用户推荐的过程中,这部电影就可能漏掉.

    我们明确一下上面算法的问题:1.无法处理"夸大值"2.评价缺失导致无法推荐.下面我们集中解决这两个问题.首先我们完善一下数据:

     我们继续随即挑选 4 部电影 , 现在让 Lily,kitty,Tom,Tank 的用户对这 4 部电影做出评价 .
dd 
增加电影评分的SQL

于是问题就被具体化成:

"用户Lily,kitty,Tom,Tank分别对新增的四部电影做了评分,根据他们的评分为用户Zen推荐一部电影"

我们的整体思路是:计算出这四部电影的加权评分,然后按照先后排名,最前面的那个就是我们要推荐给Zen.

加权的权重参数我们采用已经运算出来的皮尔逊系数.问题还是需要进一步的简化:我们如何计算电影尖峰时刻2的加权评分?

我们把Lily,kitty,Tom,Tank对这部电影的评分乘以他们和Zen的相似度然后求和,这样的结果就是越相似的人对这个结果的影响越大.其实这里我们已经可以算出四部电影的甲醛评分并做排序了.检查我们的目标评价:"缺失导致无法推荐"还没有解决,这个问题换一种角度可以表述成:"一部电影被更多人评论过,这一事实应该影响到结果".

修正策略就是我们把加权评分总和除以所有对这部电影评分过的评分者与Zen的相似度总和.

加权平均

 

dianying4 

现在我们得到了一个经过排名的影片列表,后面是Zen的可能评分.理论上我们已经完成了任务,

可以给Zen推荐电影了.事实上,真实环境中的推荐要难的多,我们这里只是像做数学题一样得出了一个结果,忽略掉的种种因素,那些干扰因素有可能成为真正影响推荐的关键.

电影之间的相似度怎么运算呢?思路很简单:那些人喜欢某一电影,这些人还喜欢什么电影?这些电影之间就存在相似度.实现起来更简单,只要把考察的对象"电影""用户"交换一下位置就可以了,我们以欧几里德距离为例:

复制代码
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  OFF  
GO
ALTER        PROCEDURE   [ dbo ] . [ EuclideanDistanceForMoive ]  
@moiveidA   int ,
@moiveidB   int
AS
 
select   *   From  moive  where  id = @moiveidA ;
select   *   From  moive  where  id = @moiveidB ;
select   @moiveidA  MoiveA, @moiveidB  MoiveB, sqrt ( sum (result)) Distance
From  
(
select  m1. * , power (m1. level - m2. level , 2 ) result  From  moive_level m1,moive_level m2 
  
where  m1.moiveid = @moiveidA   and  m2.moiveid = @moiveidB   and  m1.userid = m2.userid
)T
GO
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO
复制代码
复制代码
计算下面几组数据,距离越远相似度越差:
DECLARE   @RC   int
 
--  Set parameter values
EXEC   @RC   =   [ U-M ] . [ dbo ] . [ EuclideanDistanceForMoive ]   268 48
EXEC   @RC   =   [ U-M ] . [ dbo ] . [ EuclideanDistanceForMoive ]   7 165
EXEC   @RC   =   [ U-M ] . [ dbo ] . [ EuclideanDistanceForMoive ]   42 178
EXEC   @RC   =   [ U-M ] . [ dbo ] . [ EuclideanDistanceForMoive ]   48 314
复制代码


gngn

结果还是相当靠谱的,同为香港都市爱情喜剧的《爱君如梦》和《孤男寡女》距离最近.

 

一组量很小的数据可以演绎出这么多的有意思的东西,真的是"横看成岭侧成峰" :)

 

P.S

小小的问题,我使用SQL语句完成实践,SQL语句擅长的是关系表达和集合运算,复杂的数学运算用SQL实现不是什么好主意.上面的文章中你可以发现整个的SQL代码即使加上注释也是缺乏可读性的.而且原作者使用Python简洁明快的实现一个算法太让我手痒了,这次之后,所有的代码将迁移到Python.

目录
相关文章
透过现象看创本质的能力-从忒休斯之船到系统论
透过现象看创本质的能力-从忒休斯之船到系统论
|
4月前
|
算法 前端开发 数据挖掘
在卫星及共用电视系统工程中,我们主要关注的是如何接收、处理和分发来自卫星的电视信号,以便在楼宇或其他系统中使用。
在卫星及共用电视系统工程中,我们主要关注的是如何接收、处理和分发来自卫星的电视信号,以便在楼宇或其他系统中使用。
|
6月前
|
存储 设计模式 JavaScript
透过 for in 和 for of 的区别,你看到了什么
透过 for in 和 for of 的区别,你看到了什么
|
人工智能 监控 物联网
当公共摄像头融入网络后的7大化学反应
其实当前的实时在线直播已经应用的非常广泛了,交通上的应用是最多的,其次是企业银行商店等等所在的保安监控系统,接着是零售和服务行业的视频监控,对于有零售业服务业的大商场来说视频不仅仅只是保安作用,还兼具了人流监控的作用,让人流的大数据成为决策方案的一部分。当宽带以及设备费用彻底解下降后,摄像将会从公共转向私有,而公共摄像头将会与各行各业产生怎样各种奇妙的化学反应?以下逐步解释。
139 0
谷歌获批可以部署动作感应设备Soli传感器,为语言、行动有障碍人士提供便利
该传感器可以嵌入可穿戴设备以及手机、电脑、汽车等。
270 0
|
人工智能 大数据 vr&ar
|
Oracle 关系型数据库 数据库
|
安全 物联网 测试技术
物联网还是泄秘网?嗅探流量即可知用户动向
本文讲的是 物联网还是泄秘网?嗅探流量即可知用户动向,每种设备各自都有独特的流量特征智能家居IoT设备的每次上线都会暴露出自身意图
1357 0
下一篇
无影云桌面