仲子宇
数据分析 第五篇:基于距离评估数据的相似性和相异性
来源:魏军     发布时间: 2019-07-12      浏览次数:238

字号:

聚类分析根据对象之间的相异程度,把对象分成多个簇,簇是数据对象的集合,聚类分析使得同一个簇中的对象相似,而与其他簇中的对象相异。相似性和相异性(dissimilarity)是根据数据对象的属性值评估的,通常涉及到距离度量。相似性(similarity)和相异性(dissimilarity)是负相关的,统称为临近性(proximity)。

在聚类分析中,聚类算法的第一步都是度量数据集对象之间的距离,实际操作步骤是:对数据矩阵(用于存储数据对象)进行无量纲化处理,应用距离算法,得到相异性矩阵(用于存放数据对象的相异性值)。

注意:在计算距离之前,首先对数据进行无量纲化处理。

一,数据矩阵和相异性矩阵

假设我们有n个对象(如人),被p个属性(又称维或特征,如年龄、身高、体重或性别)刻画,这些对象记作x1=(x11,x12,…,x1p),x2=(x21,x22,…,x2p),等等,其中xij是对象xi的第j个属性的值,对象xi也称作对象的特征向量。把xi的集合叫做数据矩阵,各个对象之间的距离构成的矩阵,叫做相异性矩阵,通常情况下,常用的聚类算法都需要在这两种数据结构上运行。

1,数据矩阵

数据矩阵(data matrix)或称对象-属性结构:这种数据结构用关系表的形式或n×p(n个对象×p个属性)矩阵存放n个数据对象:

2,相异性矩阵

相异性矩阵(dissimilarity matrix)或称对象-对象结构:存放n个对象两两之间的邻近度(proximity),通常用一个n×n矩阵表示:

其中d(i,j)是对象i和对象j之间的相异性或“差别”的度量,一般而言,d(i,j)是一个非负的数值,对象i和j彼此高度相似或“接近”时,其值接近于0;而越不同,该值越大。注意,d(i,i)=0,即一个对象与自己的差别为0。此外,d(i,j)=d(j,i)。(为了易读性,我们不显示d(j,i),该矩阵是对称的。)

数据矩阵由两种不同类型的实体或“事物”组成,即行(代表对象)和列(代表属性)。因而,数据矩阵经常被称为二模(two-mode)矩阵。相异性矩阵只包含一类实体,因此被称为单模(one-mode)矩阵。许多聚类和最近邻算法都在相异性矩阵上运行,对于基于距离的相异性矩阵,可以使用stats包中的dist()函数把数据矩阵转换为相异性矩阵。

二,距离度量

在聚类分析过程中,需要把数据对象区分为不同的类,那么对象是如何划分到不同的类别当中的呢?判断不同对象是否归于一类依据的是对象之间的相似性。对象相似性的度量标准一般有两种:距离和相似性系数,距离一般用来度量观测之间的相似性,而相似性系数,一般用来度量变量之间的相似性。 距离是指:把一个观测看做M维空间中的一个点,并在空间中定义距离。基于距离的聚类算法是把距离较近的点可以归入同一类,距离远的点归入不同的类聚类分析中的距离一般用来测验样本之间的相似性,是进行聚类分析的关键步骤。在聚类分析中,经常使用欧几里得方法来计算数值属性的相异性,欧几里得是刻画数据对象的相异性的距离度量,除了欧几里得之外,还有切曼哈顿、兰氏距离等方法。 兰氏距离是一个无量纲的量,克服了闵可夫斯基距离与各指标的量纲有关的缺点,且兰氏距离对大的离群点不敏感,这使其特别适合高度偏移的和数据,但兰氏距离也没有考虑变量间的相关性。闵科夫斯基距离和兰氏距离都是假定变量之间相互独立,即在正交空间中讨论距离,但在实际问题中,变量之间往往存在着一定的相关性,为克服变量之间相关性的影响,可以采用马氏距离。下面列出6个常用的距离度量,除了马氏距离之外,其他5个距离度量都需要做无量纲化处理。

1,欧几里得距离

聚类算法中最常用的距离度量,表示空间中两点之间的直线距离:

由于特征向量的各分量的量纲不一致,通常需要先对各分量进行标准化,使其与单位无关,比如,对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

缺点:没有考虑分量之间的相关性,体现单一特征的多个分量会干扰结果。

2,最大距离(切比雪夫)

国际象棋玩过吗?国王走一步能够移动到相邻的8个方格中的任意一个,那么国王从格子(x1,y1)走到格子(x2,y2)上,最少需要多少步?你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。

3,曼哈顿距离

之所以如此命名,是因为它是城市两个点之间的街区距离,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼,实际驾驶距离就是这个“曼哈顿距离”,而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance),例如,向南2个街区,横过3个街区,共计5个街区。

4,兰氏距离(Lance距离)

兰氏距离克服了量纲的影响,但没有考虑指标间的相关性。

5,闵科夫斯基距离

闵科夫斯基距离需要用到参数p,

其中p是一个变参数,根据变参数的不同,闵氏距离可以表示一类的距离:

当p=1时,就是曼哈顿距离当p=2时,就是欧氏距离当p→∞时,就是最大距离

闵氏距离的缺点主要有两个:(1) 将各个分量的量纲(scale),也就是“单位”当作相同的看待了,(2) 没有考虑各个分量的分布(期望,方差等)可能是不同的。

6,马氏距离

马氏距离的优点:量纲无关,排除变量之间的相关性的干扰,缺点是:不同的特征不能差别对待,可能夸大弱特征。

适用场合:

1、度量两个服从同一分布并且其协方差矩阵为C的随机变量X与Y的差异程度2、度量X与某一类的均值向量的差异程度,判别样本的归属。此时,Y为类均值向量.

使用R语言实现马氏距离:

dist_mashi <-function(a,b){return (((a-b)%*% t(t(a-b))) / cov(a,b))}

三,使用dist()函数计算距离

R包stats中的dist()函数用于计算两个观测值之间的距离:

dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)

该函数计算并返回通过使用指定的距离度量计算的距离矩阵,以计算数据矩阵的行之间的距离。

参数注释:

method:度量距离的方法,默认值是"euclidean",可用的方法是:"euclidean""maximum"、"manhattan"、"canberra"、"binary" 和"minkowski",中文名称分别是:欧几里得、最大距离、曼哈顿、兰氏距离、二元距离和闵科夫斯基距离。diag:逻辑值,是否绘制距离矩阵的对角线(diagonal)upper:逻辑值,是否绘制距离矩阵的上三角(upper triangle)p:用于闵科夫斯基距离,指定power值

dist()方法返回一个下三角矩阵,使用as.matrix()函数可以使用标准中括号得到距离。

d <- dist(x)m <- as.matrix(d)

参考文档:

数据挖掘基础:度量数据的相似性和相异性

相似性度量(距离及相似系数)

R语言:计算各种距离

, 1, 0, 9);

  • 相关内容: