Python 余弦相似度与皮尔逊相关系数 计算实例


Posted in Python onDecember 23, 2019

夹角余弦(Cosine)

也可以叫余弦相似度。 几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

(2) 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

即:

余弦取值范围为[-1,1]。求得两个向量的夹角,并得出夹角对应的余弦值,此余弦值就可以用来表征这两个向量的相似性。夹角越小,趋近于0度,余弦值越接近于1,它们的方向更加吻合,则越相似。当两个向量的方向完全相反夹角余弦取最小值-1。当余弦值为0时,两向量正交,夹角为90度。因此可以看出,余弦相似度与向量的幅值无关,只与向量的方向相关。

Python 余弦相似度与皮尔逊相关系数 计算实例

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根据公式求解
d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
 
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=1-pdist(X,'cosine')

两个向量完全相等时,余弦值为1,如下的代码计算出来的d=1。

d=1-pdist([x,x],'cosine')

皮尔逊相关系数(Pearson correlation)

(1) 皮尔逊相关系数的定义

前面提到的余弦相似度只与向量方向有关,但它会受到向量的平移影响,在夹角余弦公式中如果将 x 平移到 x+1, 余弦值就会改变。怎样才能实现平移不变性?这就要用到皮尔逊相关系数(Pearson correlation),有时候也直接叫相关系数。

如果将夹角余弦公式写成:

Python 余弦相似度与皮尔逊相关系数 计算实例

皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。

在python中的实现:'

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根据公式求解
x_=x-np.mean(x)
y_=y-np.mean(y)
d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))
 
#方法二:根据numpy库求解
X=np.vstack([x,y])
d2=np.corrcoef(X)[0][1]

相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

Python 相关文章推荐
python中bisect模块用法实例
Sep 25 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
python中的列表与元组的使用
Aug 08 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
python 发送get请求接口详解
Nov 17 Python
python 实现波浪滤镜特效
Dec 02 Python
Python Matplotlib库实现画局部图
Nov 17 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 #Python
Cython编译python为so 代码加密示例
Dec 23 #Python
Python编译为二进制so可执行文件实例
Dec 23 #Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 #Python
python 实现屏幕录制示例
Dec 23 #Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 #Python
Python 内置函数globals()和locals()对比详解
Dec 23 #Python
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python合并字符串的3种方法
2015/05/21 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
技能竞赛活动方案
2014/02/21 职场文书
工会主席事迹材料
2014/06/03 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
基层工作经验证明样本
2014/11/16 职场文书
趣味运动会简讯
2015/07/20 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书