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实现的多线程端口扫描工具分享
Jan 21 Python
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
利用python获取Ping结果示例代码
Jul 06 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Python八皇后问题解答过程详解
Jul 29 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
python 制作磁力搜索工具
Mar 04 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
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
关于php开启错误提示的总结
2019/09/24 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python 实现A*算法的示例代码
2018/08/13 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
详解Python绘图Turtle库
2019/10/12 Python
Django如何实现防止XSS攻击
2020/10/13 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
培训楼经理岗位责任制
2014/02/10 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
乱世佳人观后感
2015/06/08 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
公司仓库管理制度
2015/08/04 职场文书
关于国庆节的广播稿
2015/08/19 职场文书