相似性和相异性是数据挖掘中非常重要的概念,在聚类、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,代表数据间距离越近。另一种操作方法是直接对相似度取负。一般来说,单调减函数都可以用来完成相似度和相异度间的转换。
单个属性的相似度和相异度