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函数的笔记整理
Apr 07 Python
Python生成密码库功能示例
May 23 Python
Python下载网络小说实例代码
Feb 03 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Django如何实现防止XSS攻击
Oct 13 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
python实现图片批量压缩
Apr 24 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 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
学习php开源项目的源码指南
2014/12/21 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
tagName的使用,留一笔
2006/06/26 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
canvas时钟效果
2017/02/16 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
vue中监听返回键问题
2019/08/28 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python新手入门最容易犯的错误总结
2017/04/24 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
Python版名片管理系统
2018/11/30 Python
基于python的Paxos算法实现
2019/07/03 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
举例讲解Python装饰器
2020/12/24 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Internet体系结构
2014/12/21 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
房屋买卖协议书范本
2014/04/10 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书