采用不同方式表征样本分布的紧密程度,可设计出不同的密度聚类算法。
这里说的是DBSCAN算法。
关于密度聚类,有两个概念需要明白, 什么是核心对象,什么是簇?
或者说,核心对象和簇都长什么样子?
我们先说概念,然后再看图。
核心对象是什么呢?
在算法开始前,我们会人为的定义两个超参数,一个超参数定义距离?,另一个定义样本个数MinPts。
那么,这两个是干什么用的呢?
如果说某一个样本A,它满足:周围有 MinPts个样本,且这些样本离A的距离在? 以内,那么就说该样本是 核心对象。
那么A就是核心对象。(这图 惭愧。。。。)
那么,什么是簇呢?
簇是核心对象概念的运用与展开,额,好,别打我,我说人话。
我们看图解释这个东西。
看到红框了没, 那就是一个 簇,
看到黑点了没,那就是核心对象,
看到像句号一样的白圈了没,那就是生活在核心对象范围内的存在(上上个图打勾的),
ok,很棒,三连成功, 我们开始说一下算法的执行过程吧,
算法是怎么生成这一个簇的呢?
1.首先有很多样本,遍历所有样本,找出所有的核心对象(对每个样本看?距离内的样本个数是否满足要求)
2.从所有的核心对象中任选一个,记该核心对象为A, 然后A在其邻域内(?距离的圆内)圈中所有的样本,
这些样本可能也会是核心对象,若是核心对象,则递归进行:把这个核心对象邻域(?距离)内的样本也圈起来。之后还有核心对象的话就继续下去。(这个就是利用队列层次遍历来实现了。)
此时,当2步骤结束时,就像上图一样,用红框框出了一个簇(聚簇一次成功),簇中有核心样本 和 普通的、在核心样本邻域内的样本。
另外啊,当这个回合结束时,需要在全集中扣除此次被选中的所有样本,这个很明显啊,这个样本归C1簇了, 就不能再给其他簇作为基样本了。
3.当然啦,聚类很少只聚一次的,所以算法还要继续下去。
此时,算法从剩余的核心对象中再找出一个,然后继续走2的步骤,聚出一个个簇,知道没有核心对象为止。
ok,算法结束啦,是不是很简单~~~
ok,看图,结束。
88~~~