SQL自连接(源于推荐算法中的反查表问题)
”基于用户的协同过滤算法“是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你。
要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表。
先举个例子说明下反查表:甲喜欢的物品有:A、B、C;乙喜欢的物品有:B、E、F;丙喜欢的物品有:A、J、K;而你喜欢的物品是:A、J、M。反查表就是喜欢A物品的有你、甲、丙,喜欢J物品的有你、丙,喜欢M物品的只有你,这就是和你喜欢的物品有联系的用户。有了这个反查表,我们就可以看出和你有关系的用户只有甲和丙,乙用户和你没有任何的交集。于是,接下来我们只需要再计算甲、丙和你的相似性,找出和你最相邻的用户,通过这个用户来给你推荐物品。
因此,我在实现基于用户的协同过滤算法的第一步的关键是:通过SQL自连接,能够反查到和你喜欢的物品有联系的用户。(自连接的定义By百度百科:自连接(self join)是SQL语句中经常要用到的连接方式,使用自连接可以将自身表的一个镜像当做另一个表来对待,从而能够得到一些特殊的数据。)
我所建的评分信息表拥有的字段和数据(删减版)如下图所示:

图1.评分信息表
其中,字段u_ID代表用户ID,f_ID代表视频ID,两者都是另外两张表的主键,score代表评分值。
我所使用的自连接语句为(原语句放置于存储过程中):
SELECT DISTINCT B.u_ID
FROM tb_interest A,tb_interest B
WHERE A.f_ID = B.f_ID AND A.u_ID = 2 AND B.u_ID<>2;
执行的结果截图如下:

图2.自连接语句执行结果
由结果我们可以知道,和用户2有关联的用户为4、5,即用户2评分过的视频,用户4和用户5也评分过。这样,我们利用SQL自连接语句,通过一句简单的SQL语句,就能够反查到了所要的信息。
http://www.cnblogs.com/HellerTse/archive/2014/05/02/3703801.html
SQL自连接(源于推荐算法中的反查表问题)的更多相关文章
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开&quo ...
- 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库
本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...
- Attention机制在深度学习推荐算法中的应用(转载)
AFM:Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Ne ...
- 机器学习算法 Python&R 速查表
sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- css字体中英速查表
例1(小米米官网):font-family: "Arial","Microsoft YaHei","黑体","宋体",s ...
- 机器学习算法 Python & R速查表
- PostgreSQL中,如何查表属于哪个数据库
db1=# \x Expanded display is on. db1=# SELECT * FROM information_schema.tables WHERE table_name='tab ...
- HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法
一.奇异值分解简介 奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简单的三个子矩阵的相乘来表示,这三个小矩阵描述了大矩阵重要 ...
- SimRank协同过滤推荐算法
在协同过滤推荐算法总结中,我们讲到了用图模型做协同过滤的方法,包括SimRank系列算法和马尔科夫链系列算法.现在我们就对SimRank算法在推荐系统的应用做一个总结. 1. SimRank推荐算法的 ...
随机推荐
- 2013中国大数据技术大会——BDTC2013
阿里飞天平台总架构师唐洪分享了飞天开放平台. 飞天平台特点:同时支持在线和离线应用:安全控制:分布式部署,监控和诊断:无单点故障,可用性99.9%:数据3副本,数据可靠性“10个9”. 阿里飞天平台总 ...
- OnCreate
用于创建插入符 /* CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm);//得到窗口字体信息 CreateSolidCaret ...
- 高级应用与部署 —— 主程序与web目录分离
在网站部署中,考虑网站的安全行问题,可以将您的网站主程序与web目录分离,使主程序在web目录之外,从而提高网站的安全性. 分离方法 1.将phpcms v9中程序主框架目录phpcms移动至web目 ...
- php curl 基本用法
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com"); curl_se ...
- C/C++堆栈指引(转)
C/C++堆栈指引 Binhua Liu 前言 我们经常会讨论这样的问题:什么时候数据存储在堆栈(Stack)中,什么时候数据存储在堆(Heap)中.我们知道,局部变量是存储在堆栈中的:debug时, ...
- Unity3D 经验记录
1.using UnityEngine.SceneManagement; 当在01场景调用02场景时,再载入回01场景时,代码保存的变量不会初始化,预制物体脚本内的变量会初始化. 2.当子物体太多时, ...
- hdu 1543 Paint the Wall
http://acm.hdu.edu.cn/showproblem.php?pid=1543 #include <cstdio> #include <cstring> #inc ...
- Altium中Fill,Polygon Pour,Plane的区别和用法
Fill:表示绘制一块实心的铜皮,将区域中的所有连线和过孔连接在一块,而不考虑是否属于同一个网络.假如所绘制的区域中有VCC和GND两个网络,用Fill命令会把这两个网络的元素连接在一起,这样就有可能 ...
- SmartBusinessDevFramework架构设计-1:结构简介
SmartBusinessDevFramework 简介 基于.net 4.0 开发的企业级系统框架 功能 1 自定义ORM.如果客官喜欢NHibernate EntityFramework ,并对其 ...
- 黑马程序员_Java其他对象(System,Runtime,Date,Calendar,Marh-Random)
System System类包含一些有用的类字段和方法(都是静态的).它不能被实例化. 在System类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问:加载文件和库的 ...