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批量制作雷达图的实现方法
Jul 26 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
Python使用numpy实现BP神经网络
Mar 10 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
python计算无向图节点度的实例代码
Nov 22 Python
使用python实现回文数的四种方法小结
Nov 24 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python自动创建Excel并获取内容
Sep 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP4实际应用经验篇(9)
2006/10/09 PHP
php 结果集的分页实现代码
2009/03/10 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
模拟select的代码
2011/10/19 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python读取指定字节长度的文本方法
2019/08/27 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
5s推行计划书
2014/05/06 职场文书
创建文明城市标语
2014/06/16 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
早会开场白台词大全
2015/06/01 职场文书