浅谈聚类算法

Posted 算法与数学之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈聚类算法相关的知识,希望对你有一定的参考价值。

本文就聚类问题进行小小的科普,并介绍两种简单的聚类算法:


聚类分析(Cluster analysis,亦称为群集分析)


是对于静态数据分析的一门技术,在许多领域受到广泛应用,包括机器学习,数据挖掘,模式识别,图像分析以及生物信息。聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性,常见的包括在坐标系中更加短的空间距离等。一般把数据聚类归纳为一种非监督式学习。

聚类类型


数据聚类算法可以分为结构性或者分散性。


结构性算法利用以前成功使用过的聚类器进行分类,而分散型算法则是一次确定所有分类。结构性算法可以从上至下或者从下至上双向进行计算。从下至上算法从每个对象作为单独分类开始,不断融合其中相近的对象。而从上至下算法则是把所有对象作为一个整体分类,然后逐渐分小。分割式聚类算法,是一次性确定要产生的类别,这种算法也已应用于从下至上聚类算法。基于密度的聚类算法,是为了挖掘有任意形状特性的类别而发明的。此算法把一个类别视为数据集中大于某阈值的一个区域。DBSCAN和OPTICS是两个典型的算法。许多聚类算法在执行之前,需要指定从输入数据集中产生的分类个数。除非事先准备好一个合适的值,否则必须决定一个大概值,关于这个问题已经有一些现成的技术。


下面着重讲解两种聚类算法


1、K-means

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。


K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。


算法核心:

(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;

(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;

(3) 重新计算每个(有变化)聚类的均值(中心对象)

(4) 循环(2)到(3)直到每个聚类不再发生变化为止


2、DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。


DBSCAN中的的几个定义:

Ε领域:给定对象半径为Ε内的区域称为该对象的Ε领域;

核心对象:如果给定对象Ε领域内的样本点数大于等于MinPts,则称该对象为核心对象;

直接密度可达:对于样本集合D,如果样本点q在p的Ε领域内,并且p为核心对象,那么对象q从对象p直接密度可达;

密度可达:对于样本集合D,给定一串样本点p1,p2….pn,p= p1,q= pn,假如对象pi从pi-1直接密度可达,那么对象q从对象p密度可达;

密度相连:存在样本集合D中的一点o,如果对象o到对象p和对象q都是密度可达的,那么p和q密度相联;


算法核心:

(1)检测数据库中尚未检查过的对象p,如果p为被处理(归为某个簇或者标记为噪声),则检查其邻域,若包含的对象数不小于minPts,建立新簇C,将其中的所有点加入候选集N;
(2)对候选集N 中所有尚未被处理的对象q,检查其邻域,若至少包含minPts个对象,则将这些对象加入N;如果q 未归入任何一个簇,则将q 加入C;
(3)重复步骤2),继续检查N 中未处理的对象,当前候选集N为空;
(4)重复步骤1)~3),直到所有对象都归入了某个簇或标记为噪声。

在项目中,首选了DBSCAN算法,原因很明显,快!!!


但是在使用中却碰到了不少问题,我们来看下面这两张图片:

例一:
浅谈聚类算法

例二:
浅谈聚类算法

我们用肉眼可以很明确的将这两张图中的点分为三类,当然我们希望算法的结果也是如此


在使用K-means时却出现了这样的情况:

浅谈聚类算法
浅谈聚类算法

第一张图片效果还可以,但是第二张图片,完全不是想要的结果。


分析一下原因,首先K-means要求聚类前必须知道聚类的数目,就是说我知道这些点分为三类,那么K-means才会把这些点分为三类;其次K-means很粗暴的直接看每个点与聚类中心的距离,而不参照其他因素,这就导致了第二幅图中尴尬的现象。

有了以上经验,我使用了DBSCAN,这个算法可以对聚类数目自生长,并且不会对每一个聚类规定聚类中心,于是就得到了如下的结果:

浅谈聚类算法
这个结果的正确性与K-means相比有了显著的提升,当然DBSCAN也有很多不足。比如针对密度不同的点集分类效果可能就不理想了,想要仔细研究的同学可以进一步查看相关文献


回复以下关键字获取相关文章:

数据挖掘 | 机器学习 | 数学之美 | 游戏算法 | 生活数学 | 排名算法|大型网站技术演进 | 数学名人 | 学科概述 | 计算机科学 | 搜索引擎



据说好多人都不知道长按图片也能关注,你知道吗?




以上是关于浅谈聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

浅谈聚类

浅谈K-means聚类算法

空间聚类算法简述

聚类算法 - kmeans

k均值聚类算法、c均值聚类算法、模糊的c均值聚类算法的区别

「聚类分析」16聚类分析之KMeans算法与K中心点算法