Bootstrap

数据相似性的度量方法总结

现实中,我们需要处理的数据具有着不同的形式和特征。而对数据相似性的度量又是数据挖掘分析中非常重要的环节。针对这些不同形式的数据,不可能找到一种具备普遍意义的相似性度量算法,甚至可以说,每种类型的数据都有它对应的相似度度量标准。这些标准很多,也比较杂乱,有必要作以总结。

废话不多说了,直接进入正题。

数据属性分类

现实世界,任何事物其实都可以描述成一个对象。这个概念其实跟面向对象编程中对象的含义是一致的。对象有很多属性,属性的类型当然也有所不同。打个比方说,如果把我看做一个对象,那我就基本拥有“姓名”、“性别”、“年龄”、“籍贯”等等,这些都是我的属性,和起来就是一条数据,也就是户籍部门拿到的关于我这个对象的数据。同理,如果把一张图片看做一个对象,那么“像素值”,“亮度”、“对比度”,“饱和度”等等就是图片的属性。处理图像数据,当然要从这些属性入手。

所以,看到这里,我们大概能总结出来2点:
1. 一般情况下的数据挖掘工作,其实就是针对1个或多个对象及其属性做的运算,而数据一般就被表示为:object: attributes的形式。
2. 不同对象(甚至相同对象在不同的应用场景下)的属性类型不同。需要分类讨论。

标称属性

属性值一般是一些符号或事物的名称。比如说,对相亲网站的注册用户,系统可会记录如下信息:性别,年龄,职业,地点,学历等等。这些数据都是通过名称来描述的。

二元属性

这个好理解了,所有属性都可以通过最简单的0,1描述。一般常用来表示存在性。比如说,一个感冒患者一般会用是否存在“发烧”、“流涕”、“咽痛”等症状来做记录,存在这些状况,记录为1,不存在,记录为0。当一个患者来看病时,当然就可以通过这些属性值是否为1来做出诊断的结果。

序数属性

属性值是由有意义的排序数决定的。例如,对一部电影评价,可以分为“剧情”、“演员”、“音乐”、“特技”等几个方面评价,而每个方面都有“好”、“中”、“差”3个选项供选择。而这些有排序意义的选择之间我们是无法说明具体差距的。也就是说,是定性,而非定量。

到此为止,上面的3种属性都是定性的,而非定量的。

数值属性

那么对于属性可以定量的这种属性类型,只怕也是我们生活中遇到情况最多的了,这种属性,就叫“数值属性”,有关于这些属性值的分析可以说是最多的,常见的平均数,众数、中位数等等,就是处理这些属性的。后面我们还可以看到,对于拥有数值属性的对象相似度的度量,也有着相应的方法。

相似性度量

我们分别就刚才所说的4种属性,看看当一个对象拥有不同类型的属性时,应该用什么方法度量。其实,我个人认为,没有人能告诉你一种对象到底该用什么样的方法度量其相似性,因为现实中,可能很多情况下你所需要测量的数据是非常复杂的,所以这里也只是给出一些常见的处理方法,具体问题还要具体分析。

另外,说一下,我本文的工作大多参考了韩家炜先生的大作《数据挖掘》,韩先生是此道大师,希望大家有空了多去看看他的文章。

标称属性相似度度量

很简单,拿两个对象 O1,O2 举例,直接看这两个对象每种属性的属性值的匹配数。

假设这一类对象一共有 n 个属性(每个对象都有这 n 个属性),两个对象 O1,O2 匹配的属性数为 m ,那么相似度为匹配数占总属性数的总数。

sim(O1,O2)=mn

二元属性相似度度量

总的来说,和标称属性是类似的,但是情况稍微复杂一点。要分成对称和非对称2种形式。

(1)对称二元属性

先看对称的情况,所谓对称,是说对象的所有属性都是一样重要的。这就和标称属性类似了,用所有具有相同属性值的属性个数除总的属性数。公式和标称属性一致:

sim(O1,O2)=m1+m2n

需要注意的是,这里的 m1 代表对象 O1,O2 的所有属性中,全都是1的属性数, m2 代表全都是0的属性数。 m1+m2 就是2个对象所有属性值相同的属性的数量了。可见,基本与标称属性的度量算法是一致的。

(2)非对称二元属性

所谓非对称,是说我们只关心“正匹配”的情况,也就是只关心两个对象属性中,都是1的情况。公式如下:

sim(O1,O

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;