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 web程序
Sep 11 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
详解Django 时间与时区设置问题
Jul 23 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
python单元测试框架pytest的使用示例
Oct 07 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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
用PHP+MySql编写聊天室
2006/10/09 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
星球大战与Python之间的那些事
2016/01/07 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
如何利用python读取micaps文件详解
2020/10/18 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
主题婚礼策划方案
2014/02/10 职场文书
六查六看自查材料
2014/02/17 职场文书
团日活动总结书格式
2014/05/08 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
青春雷锋观后感
2015/06/10 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
详解MySQL中的主键与事务
2021/05/27 MySQL
Python 如何实现文件自动去重
2021/06/02 Python