数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

相似性和相异性是数据挖掘中非常重要的概念,在聚类、KNN、异常检测甚至推荐系统中都有广泛的应用。在某些应用场景中,我们需要的就是数据间的相似度或相异性数据而非原始数据。

比如在推荐系统中常用的一个算法是协同过滤,在协同过滤中我们需要计算物品或用户间的相似度矩阵,在得到相似度矩阵之后,我们就可以直接舍弃原始数据了,接下来我们会直接根据相似度矩阵对用户做个性化推荐。

一、相似度和相异度简介

相似度是对两个对象间相似程度的量化,对象间越相似,相似度就越高。

相异度则是对两个对象间相异程度的量化,对象间越相似,相异度就越低。

可以看到,相似度和相异度之间既相互对立,又存在着不可分割的联系。一般来说,它们之间存在某种变换关系,是否进行变换以及将它们变换到什么区间范围内,取决于算法的需要和我们的判断。

变换数值范围

通常情况下,相似度的取值范围在[0,1]之间。假如我们的相似度数据是在[1,10]之间,我们应该如何将它们变换到我们需要的[0,1]范围内呢?一个非常实用的方法是使用“0-1标准化”手段。设min和max分别是相似度数据中的最小值和最大值,那么针对每个相似度s,我们可以通过s′=(s−min)/(max−min)来完成转换。不过有些时候相似度的取值范围可能在[-1,1]之间,这时正负号包含了一定的信息,它们可能是重要的,这种情况下我们可能会保留其符号,而非强行转换到[0,1]之间。

相异度的转换有些复杂,这是因为其取值范围往往在[0,∞]之间,要转换到[0,1]之间的话往往会损失一些信息,甚至其尺度会发生一些变化。这个过程往往需要我们结合算法需要以及具体的场景来仔细斟酌判断。

相似度和相异度之间的转换

相似度和相异度之间是可以相互转换的。比如在相似度取值范围在[0,1]之间时,我们可以用d=1−s来从相似度数据中得到相异度,这时相异度越接近1,代表数据间距离越远;相异度越接近0,代表数据间距离越近。另一种操作方法是直接对相似度取负。一般来说,单调减函数都可以用来完成相似度和相异度间的转换。

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

当我们要计算单个属性的相似度和相异度时,针对不同的数据类型,常用如下的计算方式。针对含有多个属性的样本间的相似度和相异度的计算,我们将在下边更详细地展开。

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

二、相异度

距离

我们常用距离来作为相异度的衡量指标。针对单个属性时,两个样本间的距离就是它们之间差值的绝对值;针对多个属性时,有多重衡量方法,其中最常用的就是欧几里得距离。

欧几里得距离是两个样本中的每个属性之间的差值的平方和的平方根,公式如下:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

它代表了两个点之间线段的长度。比如x坐标为(0,0),y坐标为(1,2)那么它们之间的欧几里得距离为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

我们可以将欧几里得距离推广得到闵可夫斯基距离:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

其中:

  • r=1时,曼哈顿距离;
  • r=2时,欧几里得距离;
  • r=∞时,上确界距离。

除了距离以外,针对不同的数据类型,我们还有其他的相异度衡量方式,比如集合差或者时间等。

三、相似度

相似度的衡量有多种方式,常用的有简单匹配系数、Jaccard系数和Tanimoto系数、余弦相似度、相关性等。

简单匹配系数

简单匹配系数适合作为仅包含二元属性(属性仅有两个取值,比如0和1)的数据之间的相似性度量。

假设我们有两个样本x和y,其中:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

则,简单匹配系数(SMC)的计算公式为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

也就是说,简单匹配系数是指两个样本中属性取值相同的个数除以属性总数(属性取值相同的个数+属性取值不同的个数)。

Jaccard系数

有些时候,两个属性取值相同也许不能代表任何含义。举个例子,有一万种商品,小明购买了一件商品A,小红购买了一件商品B,那么在我们理解,他们之间是没有任何相似性的。但是假如我们使用简单匹配系数来衡量,他们之间的相似度却高达0.9998。

为了应对这种0-0匹配无意义的情况,我们可以使用Jaccard系数

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

针对前边我们提到的例子,小明和小红间的Jaccard系数为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

广义Jaccard系数

广义Jaccard系数又称Tanimoto系数,该系数用EJ表示:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

广义Jaccard系数可以应对非二元的属性,当所有属性均为二元属性时,它可以被归约为Jaccard系数。它也可以用于文档数据。

余弦相似度

一般来说,文档用向量表示,向量的每个属性代表了一个特定的词在文档中出现的频率。很容易想到,这里的文档向量大多数都是稀疏的,因为大部分文档都仅仅包含了一部分词,剩下的那些没出现的词都以0值出现在向量中。在这里,没有出现的词是不应该作为相似性的成分的,否则可能大部分文档之间都存在较高的相似度。

余弦相似度是文档相似性中最常用的度量之一,同时,它还经常用于电商平台计算用户相似度、商品相似度(它们是协同过滤推荐的基础)。相对于Jaccard系数,余弦相似度的一个优点是可以处理非二元的向量(比如这里的词频不可能仅有0和1)。余弦相似度的计算公式为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

由于这里不可能有负值,所以余弦相似度的取值范围是[0, 1],当两个向量的方向完全一致时,它们在坐标系中的夹角为0,其余弦相似度就为1;当它们方向相互垂直时,它们的夹角为90度,余弦相似度为0。

公式中,很容易发现,x′和y′分别是x向量方向和y向量方向上的单位向量。也就是说,余弦相似度并不在意向量的大小(长度),仅在意他们之间的夹角。

相关性

我们还可以用Pearson相关系数来衡量数据间的相似度,它既可以应对二元变量,也可以应对连续变量。它的计算方法是两组数据的协方差除以它们各自标准差的乘积:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

在这里,协方差的计算公式为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

标准差的计算公式为:

数据挖掘中的相似性和相异性是什么?怎么度量?「必须掌握」

我们曾经专门介绍过皮尔逊相关系数,这里就不再赘述了,感兴趣的可以关注我的历史文章。

另外,常用的相似度还有对数似然相似度(LogLikelihood)、Spearman相关系数等,感兴趣的可以搜索相关文章自行探索,也可以在下方留言,如果感兴趣的人比较多,我会另外写文章来讲解。

四、如何选择

一般来说,对于稠密、连续的数据,我们常使用距离度量,比如欧几里得距离。对于稀疏数据(包含大量0-0匹配的数据),我们常用余弦相似度、Jaccard系数和广义Jaccard系数。

当然,在实际应用过程中,我们还需要考虑更多因素,比如某种度量是否已经得到大规模应用、某种度量是否在使用的软件包中得到良好支持等。

相似性和相异性的概念在数据挖掘中非常重要,希望大家都能够熟练掌握。


分享到:


相關文章: