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和MD5实现网站挂马检测程序
Mar 13 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
django中forms组件的使用与注意
Jul 08 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
Python自动化测试笔试面试题精选
Mar 12 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
Python合并pdf文件的工具
Jul 01 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图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
jquery 学习之一 对象访问
2010/11/23 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
js实现文字跑马灯效果
2017/02/23 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python+mysql实现教务管理系统
2019/02/20 Python
浅谈python标准库--functools.partial
2019/03/13 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
暑期实习鉴定
2013/12/16 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
五一劳动节活动总结
2015/02/09 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
工程部岗位职责范本
2015/04/11 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis