寻找数据之间的相似性是数据聚合、分类、拟合预测等应用中常见的场景;寻找数据之间的相异性是异常检测,排除离群点等数据操作必需的步骤。所以计算数据之间的相似度和相异度是数据处理的基本手段,常用的方法是计算数据之间的距离和密度。
相似度顾名思义就是两个对象相似程度的数值度量,常常在0(不相似)和1(完全相似)之间取值。
相异度就是两个对象之间差异程度的数值度量。相异度常常在[0,1]或[0,正无穷]之间取值。
通过数据变换,把属性值变换到相似度或相异度所在的区间:
标称属性:x = y , 相似度=1,相异度=0;x!=y,相似度=0,相异度=1 。
序数属性:把值映射到整数0到n-1之间,其中n是值的个数,相异度: d = |x - y|/(n -1) ,相似度 s = 1 - d 。
计算数据之间的距离常用的有欧几里得距离,欧氏距离有一些基本的性质:非负性distance(x, y) >=0,对称性distance(x,y) = distance(y,x),三角不等式:distance(x,y)<= distance(x,z) + distance(y,z)。
二元数据的相似性度量:
f00 :x取0并且y也取0的属性的个数
f01 : x取0并且y取1的属性的个数
f10 : x取1并且y取0的属性的个数
f11 :x取1并且y也取1的属性的个数
e.g.
x (1,0,0,0,0,0,0,0,0,0)
y (0,0,0,1,0,1,1,0,0,0)
f00 = 6
f01 = 2
f10 = 1
f11 = 0
简单匹配系数(Simple Matching Coefficient, SMC)可以在一个仅包含是非题的测验中用来发现回答问题相似的学生。
SMC = (f11 + f00) / (f00 + f11 + f10 + f01)
Jaccard系数用来处理仅包含非对称的二元属性的对象。
J = f11/(f10 + f01 + f11)
余弦相似度可以用来计算文档的相似度,文档用向量表示,每个属性代表某个关键词出现的频率。
cos(x,y) = (x*y)/(||x||*||y||)
选择合适的邻近性度量方式,邻近性度量的类型应该与数据类型相适应。对于许多稠密的、连续的数据,通常采用距离度量。对于稀疏数据,常常包含非对称的属性,通常采用忽略0-0匹配的相似性度量,对于复杂数据集,相似度依赖于它们共同具有的性质的数据,而不是依赖于它们都缺失的性质的数据。