聚类算法(基础及核心概念)

聚类分析简介


将物理或抽象对象的集合分组成为由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。在许多应用中,一个簇中的数据对象可以被作为一个整体来对待。

 

作为统计学的一个分支,聚类分析已经被广泛地研究了许多年。基于k-means(统计学教材聚类分析部分必讲)k-medoids和其他一些方法的聚类分析工具已经被加入到许多统计分析软件包或系统中,例如典型的SPSSSAS。在机器学习领域,聚类是无监督学习(unsupervised learning)的一个典型例子。在概念聚类(conceptual clustering)中,一组对象只有当它们可以被一个概念描述时才形成一个簇。在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大。

 

相异度是基于描述对象的属性值来计算的。距离和相关性是经常采用的度量方式。其中,衡量距离属性常见的有欧式距离、曼哈顿(绝对)距离、切比雪夫距离等;衡量相关性常见的有皮尔逊相关系数和斯皮尔曼等级相关系数。

 

聚类分析中的数据类型


1.先介绍一下在聚类中具有代表性的两种数据结构:

 

数据矩阵(Data matrix,或称为对象属性结构):它用p个变量(也称为属性)来表现n个对象, 例如用年龄,身高,性别,种族等属性来表现对象“人”。这种数据结构是关系表的形式,或 者看为n*p维(n个对象*p个属性)的矩阵。

 

相异度矩阵(dissimilarity matrix,或称为对象对象结构):存储n个对象两两之间的近似性, 表现形式是一个n*n维的矩阵。

 

2.数据标准化

 

为了实现度量值的标准化,一种方法是将原来的度量值转换为无单位的值(即统计学中所说的无量纲化)。给定一个变量f的度量值,可以进行如下的变换:

## 计算平均的绝对偏差(mean absolute deviation):

《聚类算法(基础及核心概念)》

这里的 x1f,,xnffn个度量值,mff的平均值,即:

 《聚类算法(基础及核心概念)》

## 计算标准化的度量值,即z-score

 《聚类算法(基础及核心概念)》

3.数据标准化后,就是计算对象之间的相异度

## 以距离作为度量:

在博文http://blog.csdn.net/buracag_mc/article/details/70143833中有过介绍,这里我为了简单说明,就直接附上截图了:

《聚类算法(基础及核心概念)》

另外,当q=无穷时,称作切比雪夫距离。

 

## 以相似性作为度量,同样,我们为了简单说明,我就直接截取前面博文的图如下:

 《聚类算法(基础及核心概念)》

 

 

这里,再补充一下如何用二元变量描述对象间的相似度:

 

一个二元变量只有两个状态:010表示该变量为空,1表示该变量存在。例如,给出一个描述病人的变量smoker1表示病人抽菸,而0表示病人不抽菸。如果用标准化的方法处理会误导聚类结果,所以要采用特定的方法来计算其相异度。

 

如果假设所有的二元变量有相同的权重,我们设q是对象ij值都为1的变量的数目,r是在对象i中值为1,在对象j中值为0的变量的数目,s是在对象i中值0,在对象j中值为1的变量的数目,t是在对象ij中值都0的变量的数目。变量的总数是pp=q+r+s+t

 j为1j为0
i为1qr
i为0st

 

基于对称二元变量的相似度称为恒定的相似度,即当一些或者全部二元变量编码改变时,计算结果不会发生变化。对恒定的相似度来说,评价两个对象ij之间相异度的著名的系数是简单匹配系数,其定义如下:

D(i,j) = (r+s) / (q+r+s+t)

 

而对非恒定的相似度,著名的评价系数是Jaccard系数,在它的计算中,负匹配的数目被认为是不重要的,因此被忽略,其定义如下:

 D(i,j) = (r+s) / (q+r+s)

 

主要聚类分析方法的分类

划分方法

划分方法(partitioning methods):给定一个n个对象或元组的数据库,一个划分方法构建数据的k个划分,每个划分表示一个聚类,并且k<=n。也就是说,它将数据划分为k个组,同时满足如下的要求:

1.每个组至少包含一个对象;

2.每个对象必须属于且只属于一个组。注意在某些模糊划分技术中第二个要求可以放宽。

 

给定k,即要构建的划分的数目,划分方法首先创建一个初始划分。然后采用一种迭代的重定位技术,尝试通过对象在划分间移动来改进划分。一个好的划分的一般准则是:在同一个类中的对象之间的距离尽可能小,而不同类中的对象之间的距离尽可能大。

 

为了达到全局优,基于划分的聚类会要求穷举所有可能的划分。实际上,绝大多数应用采用 了以下两个比较流行的启发式方法:

1.k-means 算法,在该算法中,每个簇用该簇中对象的平均值来表示。

2.k-medoids 算法,在该算法中,每个簇用接近聚类中心的一个对象来表示。

 

这些启发式聚类方法对在中小规模的数据库中发现球状簇很适用。

 

层次方法

层次的方法(hierarchical methods):层次的方法对给定数据集合进行层次的分解。根据层次的分解如何形成,层次的方法可以被分为凝聚的或分裂的方法。

 

凝聚的方法,也称为自底向上的方法,一开始将每个对象作为单独的一个组,然后继续地合并相近的对象或组,直到所有的组合并为一个(层次的上层),或者达到一个终止条件。

 

分裂的方法,也称为自顶向下的方法,一开始将所有的对象置于一个簇中。在迭代的每一步中,一个簇被分裂为更小的簇,直到终每个对象在单独的一个簇中,或者达到一个终止条件。

 

基于密度的方法 

 

基于密度的方法:绝大多数划分方法基于对象之间的距离进行聚类。这样的方法只能发现球状的簇,而在发现任意形状的簇上遇到了困难。随之提出了基于密度的另一类聚类方法,其主要思想是:只要临近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须包含至少某个数目的点。这样的方法可以用来过滤“噪音”数据,发现任意形状的簇。

 

DBSCAN是一个有代表性的基于密度的方法,它根据一个密度阈值来控制簇的增长。OPTICS是另一个基于密度的方法,它为自动的,交互的聚类分析计算一个聚类顺序

 

除此之外,还有基于网格的方法和基于模型的方法。

 

本文大概梳理了一下聚类分析的基础概念以及各分类方法的思想,随后会将具体的算法实现写上。

点赞