第一部分是学习ID3时候积累的。

一.以前写的基础知识

  1.信息:是用来消除不确定性的度量,信息量的大小,由所消除的不确定性的大小来计量(香农)。
  2.由于不确定性是由随机性引起的,所以用概率来描述和计量;熵entropy:源于热力学,是分子混乱程度的度量。
  3.X(离散型随机变量)的熵H(X) 为:H(X)= - ∑x ∈X p (x) log2 p (x),其中,约定0log2 0 = 0,通常单位为bits;一个随机变量的熵越大,它的不确定性就越大,正确估计其值的可能性就越小。越不确定的随机变量越需要大的信息量用以确定其值;熵又称为自信息(self-information),表示信源X每发一个符号(不论发什么符号)所提供的平均信息量。

二.协同过滤

  输入:“用户—物品”评分矩阵
  输出: (1)用户对某个物品喜欢程度的评分;

      (2)对于用户,n个推荐的物品列表

  2.1  基于用户的最近邻推荐(user-based cf)

  算法基本假设:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好;(2)用户的偏好不随时间变化而变化。用户相似度计算:user-based cf中pearson相关系数比较好;item-based cf中余弦相似度比较好。学术界在相似度方面有较为深入的研究,例如:很多领域都存在一些所有人都喜欢的物品(热门物品),让两个用户对有争议的物品达成共识、比对热门物品达成共识更有价值,Breese提出“反用户频率”(iuf)来表示。

  用户近邻的选择方法:(1)固定某个相似度阈值;(2)固定某个近邻数阈值

  2.2基于物品额最近邻推荐(item-based cf)

  算法基本假设:用户喜欢某个物品,那么也喜欢和这个物品相似的物品

  当用户量比较大的时候,user-based cf需要计算相似用户,这个计算代价就很大;而且,当数据发生变化的时候,之前计算出的用户之间的相似度,也不稳定。相反,item-based cf,计算item之间的关系,比较适合离线计算,而且计算出的物品之间的相似度,当数据变化的时候,结果更加稳定。

  当计算量实在太大的时候,如果一定要处理,可以采取“二次采样”的方法,即只选择数据的某个子集。

三. 关于评分

  “用户—物品”矩阵,联结用户和物品的是用户对物品的评分。可以分为显示评分和隐式评分。显示评分的问题主要在于用户需要额外付出。收集显示评分也并不是太困难,关键要有一小部分“早起培育者”先提供出来一些评分(有心理学的依据)。对于些领域,例如:个性化在线电台,隐式反馈比现实反馈效果更好。

  如果评分很少、或者没有评分,就是数据稀疏问题。是否可以利用一些别的信息,如:用户的自然属性。对于用户没有行为的物品,可否有缺省值?冷启动问题是数据稀疏问题的一个特例。

四. 更多的模型和方法

  协同过滤推荐可以分为基于记忆的方法和机遇模型的方法。前者将所有数据记忆到存储体中。后者,(离线)做数据降维,抽象出特征,运行时直接用特征。

  (1)矩阵分解方法
  SVD(基础),LSA,LSI。都是降维的方法。至于计算item之间的相似度、user之间的相似度、相似度度量选择等等,和经典的CF没啥两样。
  主成分分析方法。
  (2)关联规则挖掘
  啤酒尿布。在热门电影领域,关联规则挖掘的效果比较好。给用户推荐web页面的场景,关联规则效果也不错。

  (3)基于概率分析的方法
  将推荐问题转成分类问题。例如:用户给item的打分可以是1--5分,对于新物品、以及当前用户,给物品分到五个类别中,分别对应着1–5分。个人感觉,这种方法的作用就是为学术界发文章,在实际中很难使用。

五. 近年来实际的方法和系统

  slope one预测,google reader的预测方法(之一)。思路挺有意思的,就是用与当前用户有关的用户(与当前用户在某个物品上都打了分--分高分低无所谓)对某个物品的评分情况,来预测当前用户对于这个物品的评分情况。直觉上不见得会make sense,即便是make sense,也远不如CF那么sense。不过算法很适合并行化。且Google也是用Map reduce来做的。

  google reader实际上是一个混合推荐系统。既包括了离线计算,也包括了在线的用户行为挖掘。

六. 讨论和小结

  目前找不到一种推荐方法在所有系统和数据集上面都优秀的。所以推荐系统还要“具体问题具体分析”,多尝试。CF方法要求用户有一定的规模,太小规模,效果不可预测。
  参考:http://blog.csdn.net/xceman1997/article/details/41687339

七.遗留问题

  1.反用户频率是什么?

  2.二次采样怎么搞?

  3.item——basedCF中还会买与买过的物品相似的物品吗?如果是,意义何在?莫非这就是“喜欢该物品的还喜欢.....”(购买过还购买了,这种一般是关联规则推荐,而且物品往往是不经常买的,比如手机、单反)。

  4.基于概率分析的方法,还没看过相关论文。

  5.今天刚下了“增量聚类”“实时推荐”“矩阵分解模型”的资料,有相关资料的园友,希望分享一下,留下你的评论,说说我需要看什么就行......爱你们

Recommender Systems协同过滤的更多相关文章

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

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

  2. CF(协同过滤算法)

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

  3. 协同过滤的R语言实现及改进

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 协同过滤算法是推荐系统最常用的算法之一,本文将介绍一种方法来使它可以在大型数据集上快速训练. 协同过滤算法(CF)是构建推荐系统时最常用的技 ...

  4. 【翻译】Neural Collaborative Filtering--神经协同过滤

    [说明] 本文翻译自新加坡国立大学何向南博士 et al.发布在<World Wide Web>(2017)上的一篇论文<Neural Collaborative Filtering ...

  5. win7下使用Taste实现协同过滤算法

    如果要实现Taste算法,必备的条件是: 1) JDK,使用1.6版本.需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量. 2) Maven,使用2 ...

  6. [转]-[携程]-A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems

    原文链接:推荐系统中基于深度学习的混合协同过滤模型 近些年,深度学习在语音识别.图像处理.自然语言处理等领域都取得了很大的突破与成就.相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段. 携程 ...

  7. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统

    Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...

  8. (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&Recommender Systems

    这部分内容来源于Andrew NG老师讲解的 machine learning课程,包括异常检测算法以及推荐系统设计.异常检测是一个非监督学习算法,用于发现系统中的异常数据.推荐系统在生活中也是随处可 ...

  9. [C11] 推荐系统(Recommender Systems)

    推荐系统(Recommender Systems) 问题阐述(Problem Formulation) 将 推荐系统 纳入这门课程来讲有以下两个原因: 第一.仅仅因为它是机器学习中的一个重要的应用.在 ...

随机推荐

  1. Redis 命令 - Pub/Sub

    PSUBSCRIBE pattern [pattern ...] Listen for messages published to channels matching the given patter ...

  2. 关于蓝牙设备与ios连接后,自动打开一个app

    How to launch an iphone app when an external accessory is either paired over BT or plugged into dock ...

  3. 【转】使用C#实现ADSL自动拨号

    原帖地址:http://www.cnblogs.com/guozk/archive/2010/04/07/1705951.html   在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通 ...

  4. 关于在windows7中使用Virtual Box 按照 安卓虚拟机几个注意事项

    1.选择安卓原生镜像的问题 选择带PC的字眼的,也就是给平板PC使用的那个,我使用的版本是android-x86-4.0-r1-eeepc.iso其他类似版本也是可以的,因为我已经成功实践啦. 下载地 ...

  5. javascript笔记——正则表达式学习笔记

    indexof 查找 substring 获取字符串 [) charAt 获取某个字符 split 分割字符串,获得数组 \s:空格 \S:非空格 \d:数字 \D:非数字 \w:字符 \W:非字符 ...

  6. MySQL数据库的登陆

    MySQL数据库的登陆 MySQL是一种C/S结构. C/S(Client/Server)客户端/服务器 MySQL的客户端: 1.cmd客户端 2.可视化图形界面 3.php代码 登陆: MySQL ...

  7. [zz] pgpool-II load balancing from FAQ

    It seems my pgpool-II does not do load balancing. Why? First of all, pgpool-II' load balancing is &q ...

  8. 怎样把SEL放进NSArray里

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3805270.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  9. 利用HibernateTools从数据库表生成带注解的POJO

    在SSH框架中,如果先设计好了数据库,那么下一步就需要从数据库Table生成实体java类和hbm.xml配置文件.在最新的开发框架中,已经支持使用注解,从而避免了繁琐的hbm.xml配置,而且我们可 ...

  10. js自运行函数

    学习闭包的基础知识: 函数声明 function fn(){ //这里是代码 }; fn(); //运行fn函数 与上面等价 var fn = function(){ //这里是代码 } fn(); ...