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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。


编译最近的协同过滤算法皮尔逊相似度计算。下顺便研究R简单使用的语言。概率统计知识。
一、概率论和统计学概念复习

1)期望值(Expected Value)
由于这里每一个数都是等概率的。所以就当做是数组或向量中全部元素的平均数吧。能够使用R语言中函数mean()。
2)方差(Variance)
皮尔逊相似度计算的例子(R语言)
方差分为population variance整体方差和sample variance样本方差,差别是整体方差除以N,样本方差除以N-1。

数理统计中经常使用样本方差,R语言的var()函数计算的也是样本方差。

详细原因是样本方差是无偏的(Unbiased),想刨根问底能够Google一下。

3)标准差(Standard Variance)
非常easy。标准差就是方差的平方根。

R语言中函数为sd()。

4)协方差(Covariance)
皮尔逊相似度计算的例子(R语言)
也分成整体协方差和样本协方差,差别同上。

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后直接安装后,执行交互控制台就能够使用了。

皮尔逊相似度计算的例子(R语言)
经常使用的函数都能够从网上中查找到:
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)计算举例

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


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

皮尔森类似度的原始计算公式为: 皮尔逊相似度计算的例子(R语言)
,不继续展开化简。
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 的余弦值(见下方)。

皮尔逊相似度计算的例子(R语言)
3)存在问题
这也就是为什么会导致User1和User4更为类似的原因了,虽然User4仅仅对Item101和103评分,可是这两个评分形成的直线与User1形成的直线趋势更为接近。

同一时候还有一个问题是,假设一些几何变换不会影响相关系数,则评分的高低也被忽略掉了,仅仅是分数的趋潜在影响。当然,这是对于矩阵0和1用户-购买的物品矩阵没有效果。

版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116914.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webstrom激活码2021[最新免费获取]「建议收藏」

    (webstrom激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    129
  • 永恒之蓝病毒解决方法蠕虫_永恒之蓝病毒解决方法

    永恒之蓝病毒解决方法蠕虫_永恒之蓝病毒解决方法辛亏“永恒之蓝”爆发在周末,绝大部分员工在家休息,为我们避免内网病毒爆发赢取了时间,整个周末一直加固已有系统和准备应急预案,避免周一发生大规模“永恒之蓝”在内部大面积爆发的可能。整体措施和预防传染病的原理类似:控制传染源、切断传播途径,保护易感人群。1控制传染源:所有的办公电脑开机前都必须网络隔离,所有计算机严禁插入U盘,一旦出现感染电脑,直接拔电源。就内网环境而言,一旦出现一例,大概率爆…

    2022年10月10日
    4
  • iOS多用连接、反向协议、安全

    iOS多用连接、反向协议、安全

    2022年1月11日
    56
  • 网络机房效果图制作|步骤技术分享[通俗易懂]

    网络机房效果图制作|步骤技术分享[通俗易懂]首先看图,这个图是人视角度,两侧显露出来的空间很大,注重表现的是两侧的机柜,包含列头柜,精密空调及上方的冷通道。第一步:客户肯定得提供图纸类的资料,如CAD图纸,或是手绘的平面布置图等。这里面需要包含机房的数量,排列组合为止或是模块化设置。第二步:拿到资料,和客户沟通之后,首先要明白客户表现的是什么效果,哪个地方是侧重点等。第三步:沟通完了就需要进行下一步,就是如果客户提供了…

    2022年6月2日
    47
  • 使用javascript实现数组截取

    使用javascript实现数组截取前言:在开发项目的过程中遇到这样的一个问题,就是需要对接口查询出来的数据两个两个的进行截取,之后分别两个两个的放入数组中,再把这些数组放到一个新数组中,实现方法如下:方法一:functionarrayChunk(array,size){ letdata=[]; for(leti=0;i<array.length;i+=size){ data.push(array.slice(i,i+size)) } returndata;}arrayChunk([{i

    2022年6月5日
    39
  • windows安装git cmd_git for windows

    windows安装git cmd_git for windowsGitLFS(GitLargeFileStorge,Git大文件储存)。本文只介绍windows下的安装方式。写在前面,GitLFS安装依赖Git,所以我们先安装git下载地址【传送门】双击安装,直接next1.安装地址【传送门】2.安装双击->默认->确定->安装完成运行cmd下输入gitlfsinstall一般命令gitlfsinstall开启LFS功能gitlfstrackl文件追踪,一般后面”文件名.后缀”gitlf

    2025年10月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号