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采用getopt解析命令行输入参数实例
Sep 30 Python
go语言计算两个时间的时间差方法
Mar 13 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
python遍历文件夹下所有excel文件
Jan 03 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Flask之flask-script模块使用
Jul 26 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Python基于WordCloud制作词云图
Nov 29 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
linux 下selenium chrome使用详解
Apr 02 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
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
如何使用angularJs
2017/05/08 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
基于Python fminunc 的替代方法
2020/02/29 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
运动会稿件100字
2014/02/21 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
付款承诺函范文
2015/01/21 职场文书
教师节感谢信
2015/01/22 职场文书
质检员岗位职责
2015/02/03 职场文书
2015年仓库工作总结
2015/04/09 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
导游词之永泰公主墓
2019/12/04 职场文书