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使用range函数计算一组数和的方法
May 07 Python
python处理图片之PIL模块简单使用方法
May 11 Python
Python 性能优化技巧总结
Nov 01 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
Python os.access()用法实例
Feb 18 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
python 整数越界问题详解
Jun 27 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python 字符串池化的前提
Jul 03 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 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在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP链表操作简单示例
2016/10/15 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python 串口读写的实现方法
2019/06/12 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
Python3获取cookie常用三种方案
2020/10/05 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
学生宿舍管理制度
2014/01/30 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
技能竞赛活动方案
2014/02/21 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
工程合作意向书范本
2015/05/09 职场文书
筑梦中国心得体会
2016/01/18 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL