整理了一下最近对协同过滤推荐算法中的皮尔森相似度计算,顺带学习了下R语言的简单使用,也复习了概率统计知识。

一、概率论和统计学概念复习


1)期望值(Expected Value)
因为这里每个数都是等概率的,所以就当做是数组或向量中所有元素的平均数吧。可以使用R语言中函数mean()。

2)方差(Variance)

方差分为population variance总体方差和sample variance样本方差,区别是总体方差除以N,样本方差除以N-1。
数理统计中常用样本方差,R语言的var()函数计算的也是样本方差。具体原因是样本方差是无偏的(Unbiased),想刨根问底可以Google一下。

3)标准差(Standard Variance)
很简单,标准差就是方差的平方根。R语言中函数为sd()。

4)协方差(Covariance)
也分成总体协方差和样本协方差,区别同上。R语言中函数为cov()。注意向量中有空元素(NA)时,例如稀疏矩阵中的一行,则要cov(x,y, use='complete')。
方差也可以看做是协方差的特例,也就是:var(x)=cov(x,x)。

这里只列举了计算公式,看着有些头晕,具体还是看下面例子吧,一看就懂了。


二、相似度计算在协同过滤推荐算法中的地位


在协同过滤推荐算法中,不管是基于用户(User-based)还是基于物品(Item-based),都要通过计算用户或物品间的相似度,得到离线模型(训练学习过程)。
之后再利用排序和加权算法得到最终的推荐物品Top-N列表。不同相似度算法的选择对最终推荐结果会产生很大的影响。

1)余弦相似度(Cosine-based Similiarity)

2)相关性相似度(Correlation-based Similiarity)
这种相似度计算使用的算法就是皮尔森。

3)修正余弦相似度(Adjusted Cosine-based Similiarity)


三、R语言入门简介


Windows下的R语言安装包地址为:http://cran.r-project.org/bin/windows/base/
下载exe后直接安装后,运行交互控制台就可以使用了。



常用的函数都可以从网上中查找到:http://jiaoyan.org/r/?page_id=4100

要习惯的一点是,R语言的表达方式,例如在控制台输入:
> x<-c(1:10)
> x-mean(x)
[1] -4.5 -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5  4.5

x-mean(x)的含义是都向量x中每个元素都减去x的平均数mean(x),可以说这种表达方式高度抽象化,表现力很强。
之后我们可以用其他函数对计算结果进行聚合:
> sum(x-mean(x))
[1] 0


四、皮尔森相似度(Pearson Similiarity)计算举例


下面以另一篇文章中的用户-物品关系为例,说明一下皮尔森相似度的计算过程。



皮尔森相似度的原始计算公式为: ,不继续展开化简。

1)定义用户数组(向量)
user1<-c(5.0, 3.0, 2.5)
user5<-c(4.0, 3.0, 2.0)

2)计算方差
var(user1)=sum((user1-mean(user1))^2)/(3-1)=1.75
var(user2)=sum((user5-mean(user5))^2)/(3-1)=1

3)计算标准差
sd(user1)=sqrt(var(user1))=1.322876
sd(user5)=sqrt(var(user5))=1

4)计算协方差
cov(user1, user5)
=sum((user1-mean(user1))*(user5-mean(user5)))/(3-1)
=1.25

5)计算相似度
cor(user1, user5)
=cov(user1, user5) / (sd(user1)*(sd(user5)))
=0.9449112


五、数学特性和存在问题


以下1)和2)整理自维基百科:

1)代数特性

皮尔逊相关系数的变化范围为-1到1。 系数的值为1意味着X 和 Y可以很好的由直线方程来描述,所有的数据点都很好的落在一条 直线上,且 Y 随着 X 的增加而增加。
系数的值为−1意味着所有的数据点都落在直线上,且 Y 随着 X 的增加而减少。系数的值为0意味着两个变量之间没有线性关系。

因两个变量的位置和尺度的变化并不会引起该系数的改变,即它该变化的不变量 (由符号确定)。也就是说,我们如果把X移动到a + bX和把Y移动到c + dY,其中a、b、c和d是常数,
并不会改变两个变量的相关系数(该结论在总体和样本皮尔逊相关系数中都成立)。我们发现更一般的线性变换则会改变相关系数。

2)几何学含义

对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。
对于中心化过的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角theta 的余弦值(见下方)。



3)存在问题

这也就是为什么会导致User1和User4更为相似的原因了,尽管User4只对Item101和103评分,但是这两个评分形成的直线与User1形成的直线趋势更为接近。
同时另一个问题是,如果一些几何变换不会影响相关系数,则评分的高低也被忽略掉了,只是分数的趋势会影响。当然这对于矩阵中都是0和1的用户-物品购买矩阵没有什么影响。

皮尔森相似度计算举例(R语言)的更多相关文章

  1. 统计计算与R语言的资料汇总(截止2016年12月)

    本文在Creative Commons许可证下发布. 在fedora Linux上断断续续使用R语言过了9年后,发现R语言在国内用的人逐渐多了起来.由于工作原因,直到今年暑假一个赴京工作的机会与一位统 ...

  2. R语言的导数计算(转)

    转自:http://blog.fens.me/r-math-derivative/ 前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽 ...

  3. 数据分析与R语言

    数据结构 创建向量和矩阵 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 函数mean(), sum(), min(), m ...

  4. 数据分析,R语言

    数据结构 创建向量和矩阵 1 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 1 函数mean(), sum(), min( ...

  5. R 语言实现求导

    前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽脑汁,但始终都不知道为何而学.生活和工作基本用不到,就算是在计算机行业和金融行业,能 ...

  6. 皮尔逊相似度计算的例子(R语言)

    编译最近的协同过滤算法皮尔逊相似度计算.下顺便研究R简单使用的语言.概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 由于这里每一个数都是等概率的.所以就当做是数 ...

  7. [R语言]R语言计算unix timestamp的坑

    R+mongo的组合真是各种坑等着踩 由于mongo中的时间戳普遍使用的是unix timestamp的格式,因此需要对每天的数据进行计算的时候,很容易就想到对timestamp + gap对方式来实 ...

  8. .net 调用R语言的函数(计算统计值pvalue 对应excel :ttest)

    Pvalue 计算 项目设计pvalue计算,但是由于.net 没有类似的公式或者函数,最终决定使用.net 调用R语言 采用.net 调用r语言的公用函数 需要安装 r语言环境 https://mi ...

  9. 使用R语言-计算均值,方差等

    R语言对于数值计算很方便,最近用到了计算方差,标准差的功能,特记录. 数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [ ...

随机推荐

  1. [HNOI2012]永无乡

    题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...

  2. SPOJ Coconuts 最大流 最小割

    A group of n castle guards are voting to determine whether African swallows can carry coconuts. Whil ...

  3. SpringMvc+Spring+MyBatis 基于注解整合

    最近在给学生们讲Spring+Mybatis整合,根据有的学生反映还是基于注解实现整合便于理解,毕竟在先前的工作中团队里还没有人完全舍弃配置文件进行项目开发,由于这两个原因,我索性参考spring官方 ...

  4. day5 liaoxuefeng---访问数据库、web开发、异步IO

    一.访问数据库 二.web开发 三.异步IO

  5. 使用word

    同样这也是生活中常用到的办公软件,word本质是一个排版软件,它与一般的编辑器不同的是,它将整个文本分成了一页一页的,当然这也是方便于打印文档. 使用word还是很容易的,一般来说需要注意以下几方面的 ...

  6. 一个使用 Python 的人工智能聊天机器人框架

    一个Python 的 AI Chatbot框架 建立一个聊天室可以听起来很棒,但它是完全可行的. IKY是一个内置于Python中的AI动力对话对话界面. 使用IKY,很容易创建自然语言会话场景,无需 ...

  7. 开启CSP网页安全政策防止XSS攻击

     一.简介 CSP是网页安全政策(Content Security Policy)的缩写.是一种由开发者定义的安全性政策申明,通过CSP所约束的责任指定可信的内容来源,(内容可以是指脚本.图片.sty ...

  8. Parallel.For 平行算法 使用

    之前看到Parallel的用法,觉得很高深,很腻害,今天专门抽空研究了一下,发现还是很easy的. .NET Framework 4.0 新加的功能,所以4.0之前的无法使用哦. 下面介绍一下,Par ...

  9. ACM Robot Motion

      机器人已被编程为按照其指令中的路径进行操作.机器人要移动的下一个方向的指令放在网格中.可能的指令是 N north (up the page) S south (down the page) E ...

  10. Latex:简介及安装

    http://blog.csdn.net/pipisorry/article/details/53998352 LaTex是一个排版工具,功能强大.它是一个"所想即所得"的工具,你 ...