站点图标 多伦多书苑

Python机器学习手册:从数据预处理到深度学习

19.4 使用DBSCAN聚类算法

问题描述

要把观察值分组成高密度的聚类。

解决方案

使用DBSCAN聚类算法:

讨论

聚类是很多观察值紧密聚集在一起的区域,DBSCAN算法就是受这一点的启发而来的,它对于聚类的形状没有做任何假设。具体来说,DBSCAN算法有如下几步:

1.先选择一个随机的观察值。

2.如果x i的近邻数为最小限度数量的话,就把它归入一个聚类。

3.对xi的所有邻居重复执行步骤2,对邻居的邻居也如此,以此类推。

这些点就是聚类的核心观察值。

4.一旦步骤3处理完所有邻近的观察值,就选择一个新的随机点(重新开始执行步骤1)。

一旦完成这些步骤,我们就会得到一个聚类的核心观察值的集合。最后,凡是在聚类附近但又不是核心的观察值将被认为属于这个聚类,而那些离聚类很远的观察值将被标记为噪声。

DBSCAN对象需要设置以下3个主要参数。

eps

从一个观察值到另一个观察值的最远距离,超过这个距离将不再认为二者是邻居。

min_samples

最小限度的邻居数量,如果一个观察值在其周围小于eps距离的范围内有超过这个数量的邻居,就被认为是核心观察值。

metric

eps所用的距离度量,比如minkowski(闵可夫斯基距离)或者euclidean(欧氏距离)。注意,如果使用闵可夫斯基距离,就可以用参数p设定闵可夫斯基距离中的幂次。

如果观察训练集数据中的聚类,可以看到有两个聚类被识别出来,被标记为0和1,噪声观察值则被标记为-1:

延伸阅读

● DBSCAN(Wikipedia,https://en.wikipedia.org/wiki/DBSCAN

Author:

退出移动版