6. DBSCAN浮光略影

6. DBSCAN浮光略影

学机器学习易陷入一个误区:以为机器学习是若干种算法(方法)的堆积,熟练了“十大算法”或“二十大算法”一切即可迎刃而解,于是将目光仅聚焦在具体算法推导和编程实现上;待到实践发现效果不如人意,则又转对机器学习发生怀疑。须知,书本上仅能展示有限的典型“套路”,而现实世界任务千变万化,以有限之套路应对无限之变化,焉有不败!现实中更多更多时候,需要根据任务特点对套路进行改造融通。算法是“死”的,思想才是“活”的。欲行此道,则务须把握算法背后的思想脉络,无论创新科研还是应用实践,皆以此为登堂入室之始。

--西瓜书

DBSCAN是一种基于密度的聚类方法,把空间中扎堆的样本视为一类,类和类之间由低密度区域隔开,把不在任何一类的数据视为异常。那么要怎么样刻画“密度”这一概念呢?

DBSCAN通过2个参数espmin_samples把样本点分为3类:核心点,边缘点和异常点。

  • 核心点。指在 ϵ \epsilon ϵ邻域内至少包含min_samples个样本的点。
  • 边缘点。指在核心点 ϵ \epsilon ϵ邻域内,但是自己的邻域内的点的数目小于min_samples。边缘点在簇的边缘。
  • 异常点。不在任何核心点的邻域内的点被划为异常。

因此一类样本点包括核心点和边缘点,也就是密度大的点。异常点即为密度小的点。调大min_samples或调小esp会提高簇的密度。参数min_samples主要控制对噪声的容忍度。在有噪声和大数据集上,可以增大这个参数。参数esp是至关重要的,需要根据数据的特点自行设置。

下图(来自sklearn)大点表示核心点,小点表示边缘点,黑点表示异常点。

图片来自sklearn示例

杂记

  1. 以前以为聚类需要知道类个数
  2. 算法实现使用ball trees,kd-trees来确定点的邻居,这避免了计算完整的距离矩阵。找机会看下ball trees,kd-trees.
  3. 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要计算到中心的距离,所以一定是凸的。
  4. 数据的输入顺序会影响聚类结果。原因一是有一些边缘点既在A类核心点的邻域内,也在B类核心点的邻域内,先聚A类的话,这些点就会被归为A类,先聚B类的话,这些点就会被归为B类;另一个原因是简单的记号问题,举例来说假设按ABC三类数据按顺序输入,那么算法给出的标签是123,要是按照BAC的顺序输入,算法给出的标签也是123。也就是说算法已经区分开3类了,只是给的代号不同罢了。

参考:
5. sklearn
6. 西瓜书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值