我的小程序:
距离计算是很多学习算法会涉及的内容,当然包括聚类算法,这里简单介绍下有序属性的闵科夫斯基距离和无序属性的VDM距离。
关于有序属性,大概可以这样理解:假设身高的属性有{矮,中,高},为了计算方便,我们把它们转成数字{1,2,3},1和2较接近(矮和中相差较小),1和3较远(矮和高相差较大),发现这样的转化基本可以反应原先属性间的关系。类似这样的属性(这里是身高)可以认为是有序属性,可以直接转化成数字。
关于无序属性,比如颜色这个属性,假设有{红,黄,蓝},我们不能简单的转化为{1,2,3},因为原先的属性间没有明显的大小远近等“序”的关系,如果转化为{1,2,3},当计算距离时,会无形中引入这种序的关系(红和黄更接近,红和蓝更远)。所以类似这样的属性(这里是颜色)就称为无序属性。当然,无序属性通常可以转化为向量处理,比如转化为{[1,0,0],[0,1,0],[0,0,1]}这3个属性。
有序属性的闵科夫斯基距离计算(样本x是n维向量):
当p=2时,闵科夫斯基距离转化为欧式距离:
当p=1时,闵科夫斯基距离转化为曼哈顿距离:
无序属性的距离计算可以采用VDM:
将闵科夫斯基距离和VDM结合就可以处理混合属性了:
当不同属性的重要性不同时,可以使用加权距离:
参考资料:周志华《机器学习》