在聚类、离散点分析等应用场景,我们往往需要度量数据之间的相似程度,提高模型的泛化性。
(一)首先,我们先从用于数据相似性度量的基本数据结构开始:数据矩阵和相异性矩阵。
- 数据矩阵:或称对象-属性结构,矩阵每一行代表一个数据对象,每一列代表一个属性。
- 相异性矩阵:或称对象-对象结构,顾名思义,矩阵的行与列均为数据对象,但是矩阵每一个单元的值d(i,j)代表着i与j这两个数据对象之间的邻近度,其值越大则相似程度越低。易知,该矩阵必是一个对角线元素为0的对称矩阵。
由此,我们可得相似性度量:sim(i,j)=1-d(i,j)
(二)下面我们来介绍各种不同的数据类型采用的相似度量方法。
- 标称属性:标称属性即可以取多种状态的属性,如颜色(红、白、黑等等)。
m是i和j取值相同的属性数,p是属性总数。
假设有四个对象,一个属性为test-1,其值如下表所示:
对象 | 1 | 2 | 3 | 4 |
test-1 | A | B | C | A |
若两个对象的属性值不相等,则d(i,j)=1,因此可以构造相异性矩阵为:
所以sim(i,j)= 1 - d(i,j)= p/m
- 二元属性:二元属性又分为对称性和非对称性,对称性二元属性的每个状态都是同等重要,非对称性二元属性的每个状态不是同等重要的,比如投硬币这个事情,假如此时的应用场景是选任务,正面代表选择任务a,反面代表选择任务b,a和b没有难度区分的话,则此时的正面和反面同等重要,a和b有难度高低的话,那么正面和反面不是同等的重要,可能你更倾向于选择简单的那个。因此我们要分开考察其如何计算相似度。
举个栗子:假如此时对象i和j的二元属性关系如下表所示
对象j | ||||
对象i | 1 | 0 | sum | |
1 | q | r | q+r | |
0 | s | t | s+t | |
sum | q+s | r+t | q+r+s+t |
q是代表对象i和j都取1的属性数,r、s、t类同
在二元属性对称的情况下: ,
在二元属性非对称的情况下: , 很明显忽略掉了二者都为0的情况
- 数值属性:在数值属性取值时,往往需要先做规范化,将其落入一个较小的区间,如[0,1],主要采用的度量是欧几里得距离和曼哈顿距离,但先介绍一下闵可夫斯基距离。
闵可夫斯基距离的公式为:, 又称为范数,h为属性个数。
当p = 2时,此时的式子便是欧几里得距离,即欧氏距离。
当p = 1时,此时的式子便是曼哈顿距离。
- 序数属性:序数属性的值之间具有有意义的序,如size这个属性,具有small、medium、large。
在对其进行相似性度量时,先对各个值按照序列进行排位,比如讲small、medium、large定义为1、2、3,然后运用公式:,k为排位值,m为属性值的总数,将其映射到[0,1]之间。剩下的步骤便和数值属性一样。
- 混合类属性:基本的思路是,对不同类别的属性采取不同的方法,上面已经都已提到,如何整合在一起呢?
我们要引入一个指示符 来指示该属性是否有效。此时要考虑两种情况:
1)当对象i的属性f的值fi缺失时,或fi=0且为非对称二值属性,则 =0
2)其他情况下, =1
综合情况下的
- 余弦相似性:本质就是高等数学中的两个向量的余弦值
x和y都是向量,即对象i和j在各个属性下所取得值组成的一个集合,分母分别为x和y的欧几里得范数的值。