python 余弦相似性_数据挖掘:度量数据的相似性和相异性

本文亮点:使用python实现了书中涉及的标称属性,二元属性,数值属性,序数属性和混合属性的距离计算。talk is cheap, this is my code ,请在我们公众号"数据臭皮匠"后台回复"第二章3"获取本文涉及的代码、思维导图、数据集等资料

在诸如聚类、离群点分析和最近邻分类等数据挖掘应用中,我们需要评估对象之间的相似程度或不相似程度。典型的,相似性值介于0到1之间,如果两个对象i,j完全相同,相似性为1;完全不同,相似性为0,相异性则反之。

由于书中使用的名词相对拗口, 本文使用的名词会与书中有所不同, 比如使用相似性代替临近性, 距离代替相异性等。

9d97e989230c8c566ec44c2217764b5f.png

1.数据矩阵和相异性矩阵

假设我们有n个对象,被p个属性(又称维或特征,如年龄、身高、体重或性别)刻画。这些对象是

equation?tex=x1%3D%28x11%2Cx12%2C...%2Cx1p%29
equation?tex=x2+%3D+%28x21%2Cx22%2C...%2Cx2p%29等等,其中
equation?tex=x_%7Bij%7D是对象i的第j个属性的值。下文我们称
equation?tex=x_%7Bi%7D为对象i。

数据矩阵

具有n个对象p个属性的数据矩阵

053535d3543a814884ec35fbfc93b44d.png

相异性矩阵

其中d(i,j) 是对象i和对象j之间的距离(distance) 或称为相异性度量, 一般而言, d(i,j) 是一个非负值, 对象i,j 高度相似时, d(i,j) 接近于0 , 即距离接近于0 且d(i,j) = d(j,i) , 所以下面相异性矩阵只显示对角线左下部分。

3ef046e0adb6adeb064082dae5d0ca2b.png

对象i,j的相似性度量sim(i,j)可以表示成相异性度量d(i,j)的函数, 即:

sim(i,j) = 1- d(i,j)

2. 标称属性的相似性度量

在之前的文章(见文末链接第二章2)中,我们讲到了标称属性的定义, 简单讲, 标称属性是枚举型类别变量, 类别间无先后顺序, 如颜色: 红橙黄绿青蓝紫

如何计算标称属性所刻画的对象之间的相异性?

距离:

equation?tex=d%28i%2Cj%29%3D%5Cfrac%7Bp-m%7D%7Bp%7D

其中m为对象i,j相同的属性数, p为对象的属性总数(即对象i有p个属性)
计算标称属性距离举例

00e70d048e6e728a26981f11b241a615.png

6fb7dca7e650b65efd5279f370fc4fc4.png

7c2acd566e8b96a8103d016b6cf55b00.png

614e838ed812400b00e3c4a3f3e136c9.png

48f435bcf5a765cdd30b773cfc48f77e.png

b592363386f3dd150bf917ad040e466c.png

1bc36dcfbdf27e673098ddf8090e59ba.png

1b0ce74bcec1227bc57ce76c746276a5.png

上述计算出的为样本间的距离, 如果需要计算相似性, 则可以用下式计算

sim(i,j) = 1-d(i,j)=m/p

3.二元属性的距离计算

当该属性的值只有0,1 两个值时,称为二元属性, 其实0值和1值有相同的重要性时称为对称二元属性,如性别中的男女, 当0和1有不一样的重要性时, 为非对称二元属性,如是否得癌症, 对二元属性的详细介绍, 请参考我们的上一篇文章 (见文末链接 第二章2)

ebe2365fb74cf0a89c5ad0502f02a062.png

对称二元属性的距离计算:

equation?tex=d%28i%2Cj%29%3D%5Cfrac%7Br%2Bs%7D%7Bq%2Br%2Bs%2Bt%7D

非对称二元属性的距离计算:

equation?tex=d%28i%2Cj%29%3D%5Cfrac%7Br%2Bs%7D%7Bq%2Br%2Bs%7D

非对称二元属性的相似性即Jaccard系数计算:

equation?tex=sim%28i%2Cj%29%3D1-d%28i%2Cj%29%3D%5Cfrac%7Bq%7D%7Bq%2Br%2Bs%7D

二元属性距离计算举例

cf2bd7c0251c4e2c7a51a54aeb997356.png

3278287b01444cb692094f13bd78694e.png

a827c7ffd1390fa578148fcba4881065.png

bc5c197999e68560eb0f09fc97aadc49.png

4.数值属性的相异性

欧几里得距离:

equation?tex=d%28i%2Cj%29%3D%5Csqrt%7B%28x_%7Bi1%7D-x_%7Bj1%7D%29%5E%7B2%7D%2B%28x_%7Bi2%7D-x_%7Bj2%7D%29%5E%7B2%7D%2B...%2B%28x_%7Bip%7D-x_%7Bjp%7D%29%5E%7B2%7D%7D

曼哈顿距离:

equation?tex=d%28i%2Cj%29%3D%7Cx_%7Bi1%7D-x_%7Bj1%7D%7C%2B%7Cx_%7Bi2%7D-x_%7Bj2%7D%7C%2B...%2B%7Cx_%7Bip%7D-x_%7Bjp%7D%7C

闵可夫斯基距离:

equation?tex=d%28i%2Cj%29%3D%5Csqrt%5Bh%5D%7B%7Cx_%7Bi1%7D-x_%7Bj1%7D%7C%5E%7Bh%7D%2B%7Cx_%7Bi2%7D-x_%7Bj2%7D%7C%5E%7Bh%7D%2B...%2B%7Cx_%7Bip%7D-x_%7Bjp%7D%7C%5E%7Bh%7D%7D

当h=1时, d(i,j) 为L1范数, 即曼哈顿距离 ;当h=2时, d(i,j)为L2范数, 即欧几里得距离

上确界距离:

equation?tex=d%28i%2Cj%29%3D%5Clim_%7Bx+%5Crightarrow+%5Cinfty%7D%7B%28%5Csum_%7Bf%3D1%7D%5E%7Bp%7D%7B%7Cx_%7Bif%7D-x_%7Bjf%7D%7C%5E%7Bh%7D%7D%29%5E%7B%5Cfrac%7B1%7D%7Bh%7D%7D%7D%3Dmax_%7Bf%7D%5E%7Bp%7D%7Cx_%7Bif%7D-x_%7Bjf%7D%7C

上确界距离为两对象属性差值最大值的绝对值即:

equation?tex=max%28%7Cx_%7Bi1%7D-x_%7Bj1%7D%7C%2C%7Cx_%7Bi2%7D-x_%7Bj2%7D%7C%2C...%2C%7Cx_%7Bip%7D-x_%7Bjp%7D%7C%29

5.序数属性的距离计算

计算步骤

①: 第i个对象的f值为

equation?tex=x_%7Bif%7D,属性有
equation?tex=M_%7Bif%7D个有序状态, 表示排位1,2,...Mf, 用对应的
equation?tex=r_%7Bif%7D%5Cin%5Cleft%5C%7B+1%2C2%2C...%2CM_%7Bf%7D+%5Cright%5C%7D取代
equation?tex=x_%7Bif%7D

②: 将每个属性的值域映射到[0,1] 上 ,映射公式:

equation?tex=z_%7Bif%7D%3D%5Cfrac%7Br_%7Bif%7D-1%7D%7BM_%7Bif%7D-1%7D

③: 选取4中介绍的任一种数值属性距离计算公式计算距离

序数属性距离计算举例

9a308b2054dfeacc1330bfcc00d74bb3.png

bbccc19664db0ec4bb4417311dfb4abf.png

从结果看, 仅使用test-2属性计算距离时,样本1,2 和2,4 的距离为1 , 最不相似, 样本1,4 的距离为0 , 完全相同

6.混合属性的距离

混合属性距离计算的原理和步骤:

equation?tex=d%28i%2Cj%29%3D%5Cfrac%7B%5Csum_%7Bf%3D1%7D%5E%7Bp%7D%7B%5Cdelta_%7Bij%7D%5E%7B%28f%29%7D%7D%7Bd_%7Bij%7D%5E%7B%28f%29%7D%7D%7D%7B%5Csum_%7Bf%3D1%7D%5E%7Bp%7D%7B%5Cdelta_%7Bij%7D%5E%7B%28f%29%7D%7D%7D

其中

equation?tex=x_%7Bif%7D
equation?tex=x_%7Bjf%7D缺失(即对象i或对象j没有属性f的度量值),或者
equation?tex=x_%7Bif%7D%3Dx_%7Bjf%7D%3D0

且f属性为非对称的二元属性时,

equation?tex=%7B%5Cdelta_%7Bij%7D%5E%7B%28f%29%7D%7D%3D0,否则
equation?tex=%7B%5Cdelta_%7Bij%7D%5E%7B%28f%29%7D%7D%3D1

根据属性的数据类型, 分为三种情况计算距离, 然后求和得到两个样本的距离

① f属性是数值型时:

equation?tex=d_%7Bij%7D%5E%7B%28f%29%7D%3D%5Cfrac%7B%7Cx_%7Bif%7D-x_%7Bjf%7D%7C%7D%7Bmax_%7Bh%7Dx_%7Bxh%7D-min_%7Bh%7Dx_%7Bxh%7D%7D

② f属性为标称或二元元素时,如果

equation?tex=x_%7Bif%7D%3Dx_%7Bjf%7D
equation?tex=d_%7Bij%7D%5E%7B%28f%29%7D%3D0,否则
equation?tex=d_%7Bij%7D%5E%7B%28f%29%7D%3D1

③ f属性为序数时, 先映射为[0,1] 区间的数值, 再按照数值属性对待

混合属性距离计算举例:

da82c2bd668035addf63fc345d81a2dc.png

df14845e9da7d76ea893af2d6f89712d.png

7.余弦相似性

余弦相似性一般用来比较两个文档的的相似性, 首先将文档转换为词向量,然后求两个词向量的余弦距离,即为余弦相似性,衡量两个向量有多相似,公式为:

equation?tex=sim%28x%2Cy%29%3D%5Cfrac%7Bx.y%7D%7B%7C%7Cx%7C%7C+%7C%7Cy%7C%7C%7D

余弦相似性计算举例:

d1ec9072220ba81c9400028cffc0d932.png

66920e9f98189176b87a98bf92b3d3ab.png

c9fcc90d660b6a229563146cec5fd871.png

结果为0.94 , 跟书中结果一致,从结果来看, 两个文档是高度相似的 ,

当需要求余弦距离时, d(i,j) = 1-sim(1,j) = 0.06

当词向量值都为二值属性时, 得到余弦相似性的一个简单变种

equation?tex=sim%28x%2Cy%29+%3D+%5Cfrac%7Bx.y%7D%7Bx.x%2By.y-x.y%7D


也被称作Tanimoto系数或Tanimoto距离

数据挖掘概念与技术 第二章 系列文章:

数据挖掘概念与技术 第二章 1

数据挖掘概念与技术 第二章 2

长按公众号关注我们哦(数据臭皮匠)

5bc66d9bbc7dc87bc4276f0a0edb2ab3.png

作者:范小匠

审核:灰灰匠

编辑:森匠


版权声明:本文为weixin_34571341原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。