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 相关文章推荐
仅利用30行Python代码来展示X算法
Apr 01 Python
简述Python中的进程、线程、协程
Mar 18 Python
python编写简单爬虫资料汇总
Mar 22 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
openCV提取图像中的矩形区域
Jul 21 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python文件目录操作之os模块
May 08 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
python中doctest库实例用法
2020/12/31 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
技术总监岗位职责
2013/12/05 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
总会计师岗位职责
2014/02/19 职场文书
岗位明星事迹材料
2014/05/18 职场文书
2014年党总支工作总结
2014/12/18 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers