对称的二元属性,每个状态都同样重要,因此基于二元属性的相异性称作对称的二元相异性。如果对象i和j的相异性都用对称的二元属性刻画,则i和j的相异性为,如图所示
那么对于不对称的二元属性,,两个状态不是一样重要的。取值为0 的意义很小,我们可以忽略不计,我们称作非对称的二元相似性。所以i和j的相异性为,如图所示
这个也叫 Jaccard系数,它是比较常用的一个系数。
接下来我们来看看如何利用我们上面所说的度量方法来度量患者之间的相异性
下面是一张患者记录关系表,如图
假如一个患者的记录表包含属性name(姓名),gender(性别),fever(发烧),cough(咳嗽),test-1,test-2,test-3,test-4。其中name是对象标识符,gender是对称属性。其它的属性都是非对称二元。
对于非对称属性,值 Y (yes)和 P (positive)被设置为 1,值 N (no)被设置为 0.假设三个对象之间的距离只基于非对称属性来计算。那么三个患者 Jack,Mary,Jim 两两之间的距离 d(Jack,Jim) = ?
分析:
Jack和Jim之间的非对称属性fever(1,1),cough(0,1),test-1(1,0),test-2(0,0),test-3(0,0),test-4(0,0),根据非对称属性相异性的算法,我们不把(0,0)列入参考, q(1,1)的个数为 1, r(1,0)的个数为1,s(0,1)的个数为 1,根据非对称属性
d(i,j)=(r+s)/(q+r+s) 得出
d(Jack,Jim) = (1 + 1)/(1 + 1 + 1) = 0.67
同理我们能得出:
d(Jack,Mary)=(0 + 1)/(2 + 0 + 1) = 0.33
d(Jim,Mary)= (1 + 2)/(1 + 1 + 2) = 0.75
最后比较得出
因此这些度量显示 Jim 和 Mary不大可能患类似的疾病,因此他们具有最高的相异性以及Jcak和Mary最有可能患类似的疾病。
相信通过上面的介绍,我们基本对如何度量数据的相异性和相似性有一个基本的概念,这是聚类的一个基础算法,有着广泛的应用,后面我们讲聚类的时候会在提及。
推荐阅读 :
从分治算法到 MapReduce
Actor并发编程模型浅析
大数据存储的进化史 --从 RAID 到 Hadoop Hdfs
一个故事告诉你什么才是好的程序员