为方便起见,我们使用术语邻近度(proximity)表示相似性或相异性。由于两个对象之间的邻近度是两个对象对应属性之间的邻近度的函数。

我们首先介绍如何度量仅包含一个简单属性的对象之间的邻近度,然后考虑具有多个属性的对象的邻近度度量。

名词概念解释

  1. 定义:
  • 两个对象之间的相似度(similarity)的非正式定义是这两个对象相似程度的数值度量。通常,相似度是非负的,并常常在 0 (不相似)和 1 (完全相似)之间取值。
  • 两个对象之间的相异度(dissimilarity)是这两个对象差异程度的数值度量。通常术语距离(distance)用作相异度的用一次,相异度在区间 【0,1】中取值,但是相异度在 0 和 正无穷大 之间取值也很常见。
  1. 变换——相似度/相异度转换
    通常使用变换把相似度转换成相异度或相反,或者把邻近度变换到一个特定区间,如【0,1】,
  • 邻近度变换到特定区间 通常,邻近度度量(特别是相似度)被定义为或变换到区间【0,1】中的值。这样做的动机是使用一种恰当的尺度,由邻近度的值表明两个对象之间的相似或相异程度。对于从 0 变化到 正无穷 的相异度度量,考虑 d’ = d / d+1,
  • 将相似度变换成相异度或相反 如果相似度(相异度)落在【0,1】区间,则相异度(相似度)可以定义为 d = 1 - s (或 s = 1 - d)。另一种简单的方法是定义相似度为负的相异度(或相反)。例如,相异度 0 ,1, 10,100 可以变换成相似度 0 ,-1,-10,-100。

负变换产生的相似度结果不必局限于【0,1】区间,但是,如果希望的话,可以使用变换 s = 1/ (d + 1), s = e -d 或 s = 1 - (d - mi_d) / ( max_d - min_d) 。对于变换 s = 1/ (d + 1) ,相异度 0 ,1 ,10 ,100分别被变换到 1, 0.5 , 0.09 ,0.01 ;等等。

一般来说,任何单调递减函数都可以用来将相异度转换到相似度(或相反)当然在此过程中也必须考虑一些其他因素。涉及保持意义、扰乱标度和数据分析工具的需要。

简单属性之间的相似度和相异度——针对不同对象的单个属性

  • 标称属性 由于标称属性只携带了对象的相异性信息,因此我们只能说两个对象之间有相同的值,或者没有,如果属性值匹配,相似度则为1 ,或者为 0 。相异度类似。
  • 对于具有单个序数属性 的对象,情况更为复杂,常常需要将分类映射到从 0 或 1开始 的相继整数。 , 如{ poor = 1, fair = 2, OK = 3, good = 4, wonderful = 5}之类。 ==存在问题:序数属性比如 fair 与 good 之间的差真的和 OK 与 wonderful 的差相同吗 ? ==可能不相同,但是在实践中,我们的选择是有限的,并且在缺乏跟多信息的情况下,这是定义序数属性之间邻近度的标准方法。

简单属性的相似度和相异度

数据对象之间的相异度——针对数据对象的所有属性集合

  • 距离
    最常见的欧几里得距离(Euclidean distance)。
    距离矩阵:


    欧几里得距离可由 闵可夫斯基距离(Minkowski distance)来推广:

    其中 r 是参数, 下面是闵可夫斯基距离的三个最常见例子:
  • r = 1 ,曼哈段距离(或 L 1范数)
  • r = 2 , 欧几里得距离(或 L2范数)
  • r = 3 , 上确界距离( Lmax范数),这是对象属性之间的最大距离,更正式的定义
    距离具有一些众所周知的性质,如果 d ( x,y)是两个点 x 和 y 之间的距离,则如下性质成立。

(1)非负性。 (a) 对于所有 x 和 y ,d(x,y) >= 0 ,(b) 仅当 x = y 时 d ( x,y) = 0。
(2)对称性。 对于所有的 x 和 y ,d(x , y) = d(y , x)。
(3)三角不等式。 对于所有 x, y 和 z ,d( x, z) <= d (x ,y) + d( y, z)。

满足以上三个性质的测度称为度量(metric ),很多相异度都不满足一个或多个度量性质。

数据对象之间的相似度

对于相似度,三角不等式(或类似的性质)通常不成立,但是非对称性和非负性通常成立,更明确地说,如果 s (x ,y) 是数据点 x 和 y 之间的相似度,则相似度具有如下典型性质。
(1)仅当 x = y 时, s(x,y) = 1 .( 0 <= s <= 1)
(2)对于所有 x 和 y ,s(x,y) = s(y ,x) 。(对称性)

邻近性度量

  1. 二元数据的相似性度量
    两个仅包含二元属的对象之间的相似性度量也称为相似系数(similarity coeffcient)。并且通常在 0 和 1 之间取值,值为 1 表明两个对象完全相似,而值为 0 表示对象一点也不相似。

简单匹配系数: (Simple Matching Coefficient,SMC)
案例: x 和 y 是两个对象,都由 n 个二元属性组成。这样的两个对象(即两个二元向量)的比较可以生成如下四个量(频率):

简单匹配系数定义:

SMC 可以在一个仅包含是非题的测验中用来发现回答问题相似的学生。

Jaccard系数: Jaccard Coefficient——处理非对称的二元属性对象
假定 x 和 y 是两个数据对象,代表一个事务矩阵的两行(两个事务)。如果每个非对称的二元属性对应于商店的一种商品,则 1 表示该商品被购买, 0 表示未购买。
由于未被顾客购买的商品数远大于被其购买的商品数,因而像 SMC 这样的相似性度量将会判定所有的事务都是类似的。 (因为两个事务大部分都是 0 ,所有大部分都是相同的,所以相似性会很高)这样,常常使用 Jaccard 系数来处理仅包括非对称的二元属性的对象, Jaccard 系数通常用符号 J 表示,有如下等式定义:

与 SMC 比较:
x = ( 1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
y = ( 0, 0, 0, 0, 0, 0, 1, 0, 0, 1)
f01 = 2 x 取 0 y 取 1 的属性个数
f10 = 1 x 取 1 y 取 0 的属性个数
f00 = 7 x 取 0 y 取 0 的属性个数
f11 = 0 x 取 1 y 取1 的属性个数

SMC =( f11 + f00 ) / ( f01 + f10 + f11 + f00 ) = ( 0 + 7) / (2 + 1 + 0 + 7) = 0.7(相似性很大,因为 0 太多影响)

J = f11 / ( f01 + f10 + f11 ) = 0 /( 2 + 1 + 0 )= 0 (消除了 0 的影响)

  1. 余弦相似度——既可以处理非二元也可以处理非对称
    通常,文档用向量表示,向量的每个属性代表一个特定的词在文档中出现的频率。实际情况要复杂的多。
    尽管文档具有数以百计或数以千计的属性,但是每个文档向量都是稀疏的,因为它们具有相对较少的非零属性值。(文档规范化保持稀疏性),这样,与事务数据一样,相似性不能依赖共享 0 的个数,因为任意两个文档多半都不会包含许多相同的词,从而如果统计 0-0 匹配,则大多数文档都与其他大部分文档非常类似,所以文档的相似性度量不仅应当像 Jaccard 度量一样需要忽略 0-0 匹配,而且还必须能够处理非二元向量。

余弦相似度: cosine similarity
如果 x 和 y 是两个文档向量,则

  1. 广义 Jaccard 系数 ,相比于二元 Jaccard系数可以应用更广维度,又称 Tanimoto 系数。该系数用 EJ 表示定义:
  2. 相关性
    两个具有二元变量或连续变量的数据对象之间的相关性是对象属性之间线性联系的度量。更一般属性之前的相关性计算可以类似地定义。 两个数据对象 x 和 y 之间的皮尔森相关(Pearson 's correlation)系数由下式定义:

Bregman散度: 好难,之后要重点理解他的前世今生,以及它的作用。有预感,这是一位大人物ಥ_ಥ。

邻近度的计算问题

  • (1)当属性具有不同尺度或相关时怎么处理?
  • (2)当对象包含不同类型的属性(例如,定量属性和定性属性)时如何计算对象之间的邻近度?
  • (3)当属性具有不同的权值(并非所有的属性都对对象的邻近度具有相等的贡献)时,如何处理邻近度计算。
  1. 距离度量的标准化和相关性——当属性具有不同的值域时如何处理。(变量具有不同的尺度。)且除了值域不同外,当某些属性之间还相关时,如何计算距离?

Mahalanobis距离(马氏距离):
当属性相关、具有不同的值域(不同的方差)、并且数据分布近似于高斯(正太)分布时,欧几里得距离的拓广,Mahalanobis 距离是有用的。具体地说,两个对象(向量)x 和 y 之间的 Mahalanobis 距离定义为:

-1是数据协方差矩阵的逆。注意,协方差矩阵它的第 ij 个元素是第 i 个和第 j 个属性的协方差。

数据对象与对象之间相似度与相异度的度量相关推荐

  1. 相似度和相异度、常用距离度量、余弦相似度

    通常,具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义,因此我们首先讨论具有单个属性的对象之间的邻近度.考虑由一个标称属性描述的对象,对于两个这样的对象,相似意味什么呢?由于标称属性只携带 ...

  2. 数据挖掘之-简单属性之间的相似度和相异度

    通常,具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义. 首先了解什么是标称属性: 标称意味"与名称相关".标称属性(nominal attribute)的值是一些符号 ...

  3. 各种类型的数据的相异度(相似度)的度量

    这个大家都懂,这里参考别人的文章,记录下来方便以后回看. 1.对于标量 标量也就是无方向意义的数字,也叫标度变量.现在先考虑元素的所有特征属性都是标量的情况.例如,计算X={2,1,102}和Y={1 ...

  4. java k均值相异度计算_K-NN算法与K-Means算法的原理与区别(附带源码示例)

    KNN算法 K-Means算法 目标 确定某个元素所属的分类 将已存在的一系列元素分类 算法类别 监督的分类算法 无监督的聚类算法 数据区别 训练数据中,有明确的标签. 如:一个数据集中有几万张图片, ...

  5. 如何在 R 中计算 Bray-Curtis 相异度

    Bray-Curtis Dissimilarity是一种衡量两个不同站点之间差异的方法. 它经常在生态学和生物学中用于量化两个地点在这些地点发现的物种的不同之处. 计算如下: BC ij = 1 – ...

  6. R-数据挖掘 | 聚类分析中的各种相异(似)度计算

    目录 一.聚类的基本数据结构 二.不同数据类型的相异度计算方法 (一)区间标度变量 (二)二元变量 (三)标称变量 (四)顺序变量 (五)比例标度型变量 (六)混合类型 三.R相异(似)度计算总结 一 ...

  7. Python:json数据与Python对象之间的转换

    json数据与Python对象之间的转换 1.前面介绍了在Python中如何处理json数据,主要使用了以下几个方法     ⑴dumps():将Python对象转换为JSON格式的字符串     ⑵ ...

  8. JSON数据和JAVA对象之间的转换

    方法1: 利用阿里巴巴开源的fastjson包进行JAVA对象和JSON字符串进行转换. C++中的结构体在JAVA中用对象表示,目录结构如下: Peron类内容如下,对应C++中的Person结构体 ...

  9. JSON数据与JavaScript对象转换

    使用JSON时,最基本的工作就是JSON数据与JavaScript对象之间的互相转换.如浏览器 从服务器端获得JSON数据,然后转换为JavaScript对象在网页输出. SON: JavaScrip ...

最新文章

  1. eclipse xsd 生成java,Generate XSD from JAXB Java Classes using Eclipse
  2. Linux KVM迁移与存储
  3. 如何选择漏电保护器规格型号_施工现场三级电箱如何配置?图示详解,清晰明了!...
  4. alert中添加表格_Excel设置表格边框的几种方法,还有自动添加边框哟
  5. 朴素容斥原理[ZJOI2016][bzoj4455]小星星
  6. 【ArcGIS Pro微课1000例】0010:ArcGIS Pro导入ArcMap样式符号库——以国土三调样式为例
  7. 匿名内部类与Lambda表达式习题
  8. C# 使用Epplus导出Excel [4]:合并指定行
  9. Linux知识体系之路径属性与目录
  10. 《DOOM启世录(纪念版) 》此书出了纪念版,好像内容没变
  11. 【从零开始学架构-李运华】01|架构到底是指什么?
  12. 计算机硬件连接子系统,网络综合布线七大子系统详细讲解
  13. pycharm txt编辑器制表符与代码中\t不匹配
  14. 巴西龟饲养日志----半年捉鱼经验总结
  15. 嵌入式linux qos tc,iptables和tc脚本实现智能QOS
  16. 关于请求报文和响应报文的详解
  17. Kubernetes生产实践系列之二十三:Service Mesh之在Kubernetes部署Istio进行service mesh
  18. 哈夫曼树的概念与特点
  19. 闪迪/西数新“带锁”颗粒45FF,用SM2263XT成功开卡经验分享
  20. QQ,TIM 如何设置代理

热门文章

  1. Win11任务栏修改方法(更新中)
  2. 一段很现实的话适合发朋友圈文案
  3. 虚拟机安装包——————百度网盘
  4. vue 日历签到组件
  5. 图像修复:专栏博文推荐查阅顺序
  6. 微信公众号插入百度地址导航功能
  7. 嵌入式设备的机器码、cpu的id号以及网卡mac地址
  8. Python识别二维码条形码?用pyzbar一招搞掂(含代码)
  9. Windows下学习C语言有哪些集成开发软件?
  10. Java串口通信读写串口导致程序崩溃问题