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写入中英文字符串到文件的方法
May 06 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
浅谈Python的文件类型
May 30 Python
Python中functools模块函数解析
Mar 12 Python
手把手教你python实现SVM算法
Dec 27 Python
python读取和保存视频文件
Apr 16 Python
ipad上运行python的方法步骤
Oct 12 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 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开发中常用的字符串操作函数
2011/02/08 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP递归算法的简单实例
2019/02/28 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
农村改厕实施方案
2014/03/22 职场文书
财务情况说明书范文
2014/05/06 职场文书
积极向上的团队口号
2014/06/06 职场文书
村道德模范事迹材料
2014/08/28 职场文书
个人思想政治总结
2015/03/05 职场文书
硕士学位申请报告
2015/05/15 职场文书
集结号观后感
2015/06/08 职场文书
Python绘制散乱的点构成的图的方法
2022/04/21 Python