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 03 Python
Python书单 不将就
Jul 11 Python
python实现图书管理系统
Mar 12 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
Python向excel中写入数据的方法
May 05 Python
python开启debug模式的方法
Jun 27 Python
Python urllib.request对象案例解析
May 11 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
opencv实现图像几何变换
Mar 24 Python
pycharm debug 断点调试心得分享
Apr 16 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根据IP地址获取所在城市具体实现
2013/11/27 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
vue组件间通信解析
2017/03/01 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
建筑专业自荐信范文
2014/01/05 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
2015年妇女工作总结
2015/05/14 职场文书
大国崛起英国观后感
2015/06/02 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript