6. DBSCAN浮光略影
学机器学习易陷入一个误区:以为机器学习是若干种算法(方法)的堆积,熟练了“十大算法”或“二十大算法”一切即可迎刃而解,于是将目光仅聚焦在具体算法推导和编程实现上;待到实践发现效果不如人意,则又转对机器学习发生怀疑。须知,书本上仅能展示有限的典型“套路”,而现实世界任务千变万化,以有限之套路应对无限之变化,焉有不败!现实中更多更多时候,需要根据任务特点对套路进行改造融通。算法是“死”的,思想才是“活”的。欲行此道,则务须把握算法背后的思想脉络,无论创新科研还是应用实践,皆以此为登堂入室之始。
--西瓜书
DBSCAN是一种基于密度的聚类方法,把空间中扎堆的样本视为一类,类和类之间由低密度区域隔开,把不在任何一类的数据视为异常。那么要怎么样刻画“密度”这一概念呢?
DBSCAN通过2个参数esp
和 min_samples
把样本点分为3类:核心点,边缘点和异常点。
- 核心点。指在
ϵ
\epsilon
ϵ邻域内至少包含
min_samples
个样本的点。 - 边缘点。指在核心点
ϵ
\epsilon
ϵ邻域内,但是自己的邻域内的点的数目小于
min_samples
。边缘点在簇的边缘。 - 异常点。不在任何核心点的邻域内的点被划为异常。
因此一类样本点包括核心点和边缘点,也就是密度大的点。异常点即为密度小的点。调大min_samples
或调小esp
会提高簇的密度。参数min_samples
主要控制对噪声的容忍度。在有噪声和大数据集上,可以增大这个参数。参数esp
是至关重要的,需要根据数据的特点自行设置。
下图(来自sklearn)大点表示核心点,小点表示边缘点,黑点表示异常点。
杂记
- 以前以为聚类需要知道类个数
- 算法实现使用ball trees,kd-trees来确定点的邻居,这避免了计算完整的距离矩阵。找机会看下ball trees,kd-trees.
- sklearn文档中提到“Due to this rather generic view, clusters found by DBSCAN can be any shape, as opposed to k-means which assumes that clusters are convex shaped.”凸是因为kmearns要计算到中心的距离,所以一定是凸的。
参考:
- sklearn
- 西瓜书