相似性和相异性的度量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相似性和相异性的度量
相似性和相异性是重要的概念,因为它们被许多数据挖掘技术所使用,如聚类、最近邻分类和异常检测等。在许多情况下,一旦计算出相似性或相异性,就不再需要原始数据了。这种方法可以看作将数据变换到相似性(相异性)空间,然后进行分析。
首先,我们讨论基本要素-- 相似性和相异性的高层定义,并讨论它们之间的联系。为方便起见,我们使用术语邻近度(proximity )表示相似性或相异性。由于两个对象之间的邻近度是两个对象对应属性之间的邻近度的函数,因此我们首先介绍如何度量仅包含一个简单属性的对象之间的邻近度,然后考虑具有多个属性的对象的邻近度度量。这包括相关和欧几里得距离度量,以及Jaccard 和余弦相似性度量。前二者适用于时间序列这样的稠密数据或二维点,后二者适用于像文档这样的稀疏数据。接下来,我们考虑与邻近度度量相关的若干重要问题。本节最后简略讨论如何选择正确的邻近度度量。
1)基础
1. 定义
两个对象之间的相似度(similarity )的非正式定义是这两个对象相似程度的数值度量。因而,两个对象越相似,它们的相似度就越高。通常,相似度是非负的,并常常在0(不相似)和1(完全相似)之间取值。
两个对象之间的相异度(dissimilarity )是这两个对象差异程度的数值度量。对象越类似,它们的相异度就越低。通常,术语距离(distance )用作相异度的同义词,正如我们将介绍的,距离常常用来表示特定类型的相异度。有时,相异度在区间[0, 1] 中取值,但是相异度在0 和之间取值也很常见。
2. 变换
通常使用变换把相似度转换成相异度或相反,或者把邻近度变换到一个特定区间,如[0, 1] 。例如,我们可能有相似度,其值域从1 到10,但是我们打算使用的特定算法或软件包只能处理相异度,或只能处理[0, 1] 区间的相似度。之所以在这里讨论这些问题,是因为在稍后讨论邻近度时,我们将使用这种变换。此外,这些问题相对独立于特定的邻近度度量。
通常,邻近度度量(特别是相似度)被定义为或变换到区间[0, 1] 中的值。这样做的动机是使用一种适当的尺度,由邻近度的值表明两个对象之间的相似(或相异)程度。这种变换通常是比较直截了当的。例如,如果对象之间的相似度在1(一点也不相似)和10(完全相似)之间变化,则我们可以使用
如下变换将它变换到[0, 1]区间:s' = (s-1)/9 ,其中s和s'分别是相似度的原值和新
值。一般来说,相似度到[0,1]区间的变换由如下表达式给出:
s'=(s-min_s) / (max_s - min_s) ,其中max_s和min_s 分别是相似度的最大值和最小值。类似地,具有有限值域的相异度也能用d' = (d - min_d) / (max_d - min_d) 映射到[0, 1]区间。
然而,将邻近度映射到[0, 1]区间可能非常复杂。例如,如果邻近度度量原来在区间[0 1000]上取值,则需要使用非线性变换,并且在新的尺度上,
值之间不再具有相同的联系。对于从0变化到1000的相异度度量,考虑变换
d' = d / (1 + d) ,相异度0、、2、10、100 和1000 分别被变换到0、、、、和。在原来相异性尺度上较大的值被压缩到1附近,但是否希望如此则取决于
应用。另一个问题是邻近度度量的含义可能会被改变。例如,相关性(稍后讨论)是一种相似性度量,在区间[-1, 1]上取值,通过取绝对值将这些值映射
到[0, 1]区间丢失了符号信息,而对于某些应用,符号信息可能是重要的。
将相似度变换成相异度或相反也是比较直截了当的,尽管我们可能再次面临保持度量的含义问题和将线性尺度改变成非线性尺度的问题。如果相似度
(相异度)落在[0, 1]区间,则相异度(相似度)可以定义为 d = 1 - s (或s
=1 - d )。另一种简单的方法是定义相似度为负的相异度(或相反)。例如,相异度0,1,10和100可以分别变换成相似度0,-1,-10 和-100。
负变换产生的相似度结果不必局限于[0,1]区间,但是,如果希望的话,
则可以使用变换
s = 1/(d + 1),頊心-叽应。对于变换s = 1/(d +
1),相异度0, 1, 10, 100 分别被变换到1,,,;对于,它们分别被
r d - min d
] --------- :——= --- :
变换到,,,;对于s二和皿二-即心,它们分别被变换到,,,。在这里的讨论中,我们关注将相异度变换到相似度。
一般来说,任何单调减函数都可以用来将相异度转换到相似度(或相反)。当然,在将相似度变换到相异度(或相反),或者在将邻近度的值变换到新的尺度时,也必须考虑一些其他因素。我们提到过一些问题,涉及保持意义、扰乱标度和数据分析工具的需要,但是肯定还有其他问题。
2)简单属性之间的相似度和相异度
通常,具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义,因此
我们首先讨论具有单个属性的对象之间的邻近度。考虑由一个标称属性描述的对象,对于两个这样的对象,相似意味什么呢由于标称属性只携带了对象的相异性信息,因此我们只能说两个对象有相同的值,或者没有。因而在这种情况下,如果属性值匹配,则相似度定义为1,否则为0;相异度用相反的
方法定义:如果属性值匹配,相异度为0,否则为1。
对于具有单个序数属性的对象,情况更为复杂,因为必须考虑序信息。考虑一个在标度{poor, fair, OK, good, wonderful}上测量产品(例如,糖块)
质量的属性。一个评定为wonderful的产品P1与一个评定为good的产品P2应当比它与一个评定为0K的产品P3更接近。为了量化这种观察,序数属性的值常常映射到从0或1开始的相继整数,例如,{poor = 0, fair =1, OK = 2, good = 3, wonderful = 4}。于是,P1 与P2之间的相异度d(P1, P2) = 3-2 =
1,或者,如果我们希望相异度在0和1之间取值,d(P1, P2) = (3-2)/4 = ;序数属性的相似度可以定义为s = 1-d。
序数属性相似度(相异度)的这种定义可能使读者感到有点担心,因为这里我们定义了相等的区间,而事实并非如此。如果根据实际情况,我们应该计算出区间或比率属性。值fair与good的差真和OK与wonderful的差相同吗可能不相同,但是在实践中,我们的选择是有限的,并且在缺乏更多信息的情况下,这是定义序数属性之间邻近度的标准方法。
对于区间或比率属性,两个对象之间的相异性的自然度量是它们的值之差的绝对值。例如,我们可能将现在的体重与一年前的体重相比较,说"我重了10磅。"在这类情况下,相异度通常在0和x之间,而不是在0和1之间取值。如前所述,区间或比率属性的相似度通常转换成相异度。
表2-7总结了这些讨论。在该表中,x和y是两个对象,它们具有一个指明类型的属性,d(x, y)和s(x, y)分别是x和y之间的相异度和相似度(分别用d和s表示)。其他方法也是可能的,但是表中的这些是最常用的。
下面两节介绍更复杂的涉及多个属性的对象之间的邻近性度量:(1)数据对