【原创】聚类思想的分析

  聚类算法在数据挖掘中经常使用,思想简单直接。

  在系统中,自己也实现过几个聚类算法,做针对性的优化也并无它难度。

  由于其方式的简单,开始也未对它有过深入思考。

  但是,如果你想让数据自己说话,还是离不开聚类。

  因此调研了很多聚类算法,做一些总结。

--------------------------------------------------------------------------------------------------------

 

 

聚类算法大体分四类

1.层次聚类(顶下和底上及改良)

2.划分聚类(Kmeans及改良) 

3.密度聚类(DBSCAN、SNN及改良) 

4.模糊聚类(FCM及改良)

当然它们并不是天然分割的,之间互有交叉。当然具体怎么分也是仁者见仁的事情。这种分类方式是根据 聚类核心依据 划分的。

 

按我自己看来,它们之间的关系如下:

 

由于聚类是非监督的,因此是非意识的。可是,我们仍然希望通过尽可能先验来提高聚类的效果。

 

也就是说,聚类算法仍然希望给它指明一个方向,这个方向在我们通常的做法就是告诉它:实际上这个数据集有几类(包括噪音点也自成一类)。

 

所以,这也就是我想表达的为什么把划分聚类和模糊聚类归为先验聚类

 

但实际情况经常是,那么大的数据集,鬼知道几类。

 

对,没人知道。但我们想让数据自己告诉我们。

 

可没有先验,数据凭什么告诉我们?

 

这里我举两个例子:

1) 图片

将一张图的颜色压缩为0/1黑白两色后如下。

就单单让你看这张图,你会划分几类?

 

你可能说1 类 、 2类 、3类都有可能。

 

是呢,你都不知道,那数据自己怎么知道?

 

2) 文本文本聚类是很普遍的一件事了。就假设现在是简单的词袋模型。

下面是文本文档向量的示意图(可以想象成N维)。

 

在数据库里其实你看到的也就是这么一堆向量值,那这次你又怎么分?

 

 

 

 

 

 

 

 

 

 

 

 

 

可能这个文档集的构造是:

1.我喜欢苹果手机。

2.我喜欢三星手机。

 

文档集是100篇关于手机的评价,其中50篇主语用 苹果,另外50篇主语用 三星。

 

所以,如果用户想知道两种手机的情况,那是两类。如果用户想知道手机的情况,那就是一类。

 

那么数据自己如何分呢?

 

数据也不知道。

 

因此针对不同的应用场景,需要人为的加入先验来提高聚类效果。

 

Kmeans和FCM都有一个固定的先验K,导致先验聚类存在一个优化目标,因此即使Kmeans有诸多问题,但是其聚类效果仍然不错。

优化目标:

这也就是为什么 Kmeans每次迭代更新中心点为类内均值的原因。

 

写了这么多,并不是说先验聚类优于自发聚类,自发聚类其实也有一定程度的先验(各类阈值,纯先验)。

 

重要的是面对不同的问题,需要使用针对性的方法。重要的东西说一遍也可以。

 

不具备普遍性是由于聚类算法自身的限制而导致的。

 

似乎有一直在夸先验聚类的嫌疑,下面举个例子说明自发聚类的应用场景。

图像压缩

 

RGB(255,255,255)的三元组,但是空间不足那么多,把8bit*3 压缩为 4bit*3(简单的话做hash映射)。

 

压缩前:

压缩后:

 

最后,聚类的非监督决定了其不具普适性。因此根据场景灵活运用各种聚类算法,非常重要。

 

这篇文章是更具体的分析对比 各种聚类算法的优劣

 

未经博主允许,不能转载任何文章。

 

posted @ 2015-07-23 12:35  Roly-Poly  阅读(2087)  评论(0编辑  收藏  举报