数据相似性的度量

在聚类、离散点分析等应用场景,我们往往需要度量数据之间的相似程度,提高模型的泛化性。

(一)首先,我们先从用于数据相似性度量的基本数据结构开始:数据矩阵和相异性矩阵。

  • 数据矩阵:或称对象-属性结构,矩阵每一行代表一个数据对象,每一列代表一个属性。
  • 相异性矩阵:或称对象-对象结构,顾名思义,矩阵的行与列均为数据对象,但是矩阵每一个单元的值d(i,j)代表着i与j这两个数据对象之间的邻近度,其值越大则相似程度越低。易知,该矩阵必是一个对角线元素为0的对称矩阵。

由此,我们可得相似性度量:sim(i,j)=1-d(i,j)

(二)下面我们来介绍各种不同的数据类型采用的相似度量方法。

  • 标称属性:标称属性即可以取多种状态的属性,如颜色(红、白、黑等等)。

d(i,j)=\frac{p-m}{p} m是i和j取值相同的属性数,p是属性总数。

假设有四个对象,一个属性为test-1,其值如下表所示:

对象 1 2 3 4
test-1 A B C A

若两个对象的属性值不相等,则d(i,j)=1,因此可以构造相异性矩阵为:

\begin{bmatrix} 0 & & \\ 1 & 0 \\ 1 & 1 & 0\\ 0 & 1 & 1 & 0 \end{bmatrix}  所以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类同

在二元属性对称的情况下:d(i,j)=\frac{r+s}{q+r+s+t}   ,    sim(i,j)=\frac{q+t}{q+r+s+t}

在二元属性非对称的情况下:d(i,j)=\frac{r+s}{q+r+s}    ,   sim(i,j)=\frac{q}{q+r+s}  很明显忽略掉了二者都为0的情况

  • 数值属性:在数值属性取值时,往往需要先做规范化,将其落入一个较小的区间,如[0,1],主要采用的度量是欧几里得距离和曼哈顿距离,但先介绍一下闵可夫斯基距离。

闵可夫斯基距离的公式为:\sqrt[p]{\sum_{k}^{h}\left | x_{ik} -\right x_{jk}|^{p}}, 又称为L_{p}范数,h为属性个数。

当p = 2时,此时的式子便是欧几里得距离,即欧氏距离。

当p = 1时,此时的式子便是曼哈顿距离。

  • 序数属性:序数属性的值之间具有有意义的序,如size这个属性,具有small、medium、large。

在对其进行相似性度量时,先对各个值按照序列进行排位,比如讲small、medium、large定义为1、2、3,然后运用公式:\frac{k-1}{m-1},k为排位值,m为属性值的总数,将其映射到[0,1]之间。剩下的步骤便和数值属性一样。

  • 混合类属性:基本的思路是,对不同类别的属性采取不同的方法,上面已经都已提到,如何整合在一起呢?

我们要引入一个指示符\delta _{i} 来指示该属性是否有效。此时要考虑两种情况:

1)当对象i的属性f的值fi缺失时,或fi=0且为非对称二值属性,则\delta _{i} =0

2)其他情况下,\delta _{i} =1

综合情况下的d(i,j)=\frac{\sum_{f=1}^{p}\delta _{ij}^{f}d_{ij}^{f}}{\sum_{f=1}^{p}\delta _{ij}^{f}}

  • 余弦相似性:本质就是高等数学中的两个向量的余弦值

sim(x,y)=\frac{x\cdot y}{\left \| x \right \|\left \| y \right \|} x和y都是向量,即对象i和j在各个属性下所取得值组成的一个集合,分母分别为x和y的欧几里得范数的值。

猜你喜欢

转载自blog.csdn.net/jumdar/article/details/85851488