本文引自http://blog.csdn.net/fwing/article/details/4942886

现在的推荐系统特别火啊。做得最好的应该是Amazon了。

上面是Amazon的图书推荐。

用的就是著名的 协同过滤(Collaborative filtering)算法。

我们用一个简单的例子来说明。

下面是一个用户购买的书籍的表格。

计算机网络

算法导论

人工智能

数据库系统实现

概率统计

GRE 词汇手册

小明

1

0

1

0

1

0

小张

0

1

1

0

1

0

小李

1

1

0

0

0

0

小王

0

0

0

0

1

1

上面的1表示购买,0表示没有购买。

那么我们怎么来给小明推荐书籍呢?

先来看看Amazon之前的传统的协同过滤(Collaborative filtering)是怎么做的。

首先呢,根据每个人买的书籍,我们可以将每个用户表示成一个向量。

例如,

V(小明)=<1, 0, 1, 0, 1, 0>

V(小张)=<0, 1, 1, 0, 1, 0>

V(小李)=<1, 1, 0, 0, 0, 0>

V(小王)=<0, 0, 0, 0, 1, 1>

然后呢,我们做这样的假设,买书习惯跟小明类似的人,如果购买了小明没有买的书,那么我们就认为,小明很有可能买这本书。

于是,问题变成了找买书习惯跟小明类似的人。提到向量跟相似度,我们自然就想到了用余弦来衡量相似度。

扔个公式在此给那些忘记了的童鞋们。

接下来,大家动手算一下吧。

cos<V(小明), V(小张) >=0.67

cos<V(小明), V(小李) >=0.41

cos<V(小明), V(小王) >=0.41

呵呵,那么跟小明习惯最像的就是小张了。

然后,我们发现小张买了《算法导论》,但是小明没有买,于是我们就给小明推荐《算法导论》。

这个方法看起来很不错,那么为什么Amazon提出了另外的一种方法呢?

再来看看Amazon的item-to-item协同过滤系统吧。

有一天呢,Amazon的一个工程师脑袋抽筋,不小心把上面的表格拿错方向了。于是变成了下面的样子。

小明

小张

小李

小王

计算机网络

1

0

1

0

算法导论

0

1

1

0

人工智能

1

1

0

0

数据库系统实现

0

0

0

0

概率统计

0

1

0

1

GRE 词汇手册

0

0

0

1

如果把书的那一行看成一个向量,有啥发现没?对了,我们可以找相似的人,我们还可以找相似的书!!!

这也就是Amazon的item-to-item协同过滤系统。

很多时候,创新就是这么简单,写paper就是这么容易啊 ,换个方向思考 (呃,那位童鞋,不是叫你把书拿反了看)。

下面简单描述一下方法。

我们可以先算出任意两个物品之间的相似度(跟上面类似啊,自己算)。

接下开我们看到小明买了《计算机网络》和《人工智能》的书,把跟这两本书类似的书推荐给小明。

跟《计算机网络》最相似的是 《算法导论》和 《人工智能》,跟 《人工智能》最相似的是 《计算机网络》和 《算法导论》。

最后的结果,是《算法导论》^_^。

用这个方法呢,我们就可以给用户推荐说,买了这个商品的用户还购买了***

那这方法是不是有什么优点呢?(废话啊,不然Amazon会拿来用,商人是很聪明的)

Tradition VS Amazon

Amazon的CF算法可以在离线的情况下把item之间的相似度计算好。当一个用户登陆后,我们需要的也只是检查用户的购买历史,然后把跟这些item相似的item按一定的方法(比如受欢迎程度)排序展现给用户。一般来说,用户购买的东西只是一个小的集合,因此不需要花很多的时间来计算。

而且,如果用户没有登陆,我们依然可以根据他的浏览历史来做推荐。例如,上面的图片就是我在没有登陆的情况下查看了一下《Beautiful Architecture》,然后Amazon给我做了推荐。

对于Amazon这样的网站来说,用户量是远远大于商品数量的。因此,Amazon的CF算法(计算商品相似度)比起传统的CF算法(计算用户相似度),大大地节约了资源。

对于一个未登陆的用户来说,传统的CF算法没办法根据他的浏览历史来推荐(在线计算一个用户跟其他所有用户的相似度显然不可能)。

Amazon的推荐系统的更多相关文章

  1. Mahout构建图书推荐系统【一起学Mahout】

    阅读导读: 1.Mahout中推荐过滤算法支持哪两种算法? 2.用java代码怎样计算男性用户打分过的图书? 3.itemEuclidean.userEuclideanNoPref各自是什么算法? 1 ...

  2. 推荐系统第3周--- 大数据环境下的itemCF实现

    代码报错注意事项: 1:最后Ctrl+shift+O  导入包2:导入mahout包3:新建datafile文件包,在其下面新建csv文件

  3. 项目实战:Mahout构建图书推荐系统

    前言 本文是Mahout实现推荐系统的又一案例,用Mahout构建图书推荐系统.与之前的两篇文章,思路上面类似,侧重点在于图书的属性如何利用.本文的数据在自于Amazon网站,由爬虫抓取获得. 目录 ...

  4. 转】Mahout构建图书推荐系统

    原博文出自于: http://blog.fens.me/hadoop-mahout-recommend-book/ 感谢! Mahout构建图书推荐系统 Hadoop家族系列文章,主要介绍Hadoop ...

  5. data mining,machine learning,AI,data science,data science,business analytics

    数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...

  6. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  7. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  8. 机器学习系列(17)_Yelper推荐系统

     1. 我们为什么需要推荐系统?“推荐”可是个当红话题.Netflix愿意用百万美金召求最佳的电影推荐算法,Facebook也为了登陆时的推荐服务开发了上百个项目,遑论现在市场上各式各样的应用都需要个 ...

  9. Netflix公布个性化和推荐系统架构

    Netflix的推荐和个性化功能向来精准,前不久,他们公布了自己在这方面的系统架构. 3月27日,Netflix的工程师Xavier Amatrain和Justin Basilico在官方博客发布文章 ...

随机推荐

  1. MY SQL8.0里程碑发布

    MySQL 开发团队于 12 日宣布 MySQL 8.0.0 开发里程碑版本(DMR)发布! 可能有人会惊奇 MySQL 为何从 5.x 一下跳跃到了 8.0.事实上,MySQL 5.x 系列已经延续 ...

  2. Oracle分页存储过程

    1.在oracle的sqlplus或其他工具中运行一下pl/sql块建立存储过程 --创建包create or replace package testpackage astype test_curs ...

  3. Frameset 框架集 导航栏 的使用

    在index.jsp中 使用jsp标签转发到制定页面 <body> <jsp:forward page="/admin/frame.jsp"></js ...

  4. rpm常用命令

    * 手动安装 rpm 包  `rpm-ivh xxxxx.rpm`  参数:   --force 即使覆盖其他包的文件也没强迫安装   --nodeps 即使依赖包没安装,也被强制安装 * 查看 rp ...

  5. nginx+tomcat负载均衡

    最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...

  6. 刨一刨内核container_of()的设计精髓

    新年第一帖,总得拿出点干货才行,虽然这篇水分还是有点大,大家可以晒干了温水冲服.这段时间一直在整理内核学习的基础知识点,期间又碰到了container_of()这个宏,当然还包括一个叫做offseto ...

  7. NopCommerce 框架系列(一)

    今天,终于抽出时间来写写博文,也希望自己能养成写博文的好习惯,大神勿喷. 我从NopCommerce官网上下载了源码,以便自己学习研究,如有需要下载源码的朋友,请点击链接: http://www.no ...

  8. [LeetCode][Java]Candy@LeetCode

    Candy There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  9. call_user_function()方法的使用

    call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] ) 调用第一个参数所提供的用户自定义的函数. 返回值: ...

  10. C#数据结构选择

    选择一个合适的数据结构会对程序的性能有着显著的提高 线性表和链表: 1.LinkedList<T>:适合于元素数组不固定,存在大量列表的头尾添加动作场合.其它可使用List<T> ...