机器学习(七) 聚类之DBSCAN

针对聚类K-means算法中不能对特定形状的样本进行分类,提出了一种新的聚类算法(DBSCAN)。
DBSCAN 是一种著名的密度聚类算法,它基于一组“邻域”参数来刻画样本分布的紧密程度。

7.1 基本概念

DBSCAN:Density-Based Spatial Clustering of Applications with Noise
核心对象:若某个点的密度达到算法设定的阈值则其为核心点。即r领域内点的数量不小于minPts。
距离阈值:设定的半径r
直接密度可达:若某点p在点q的r领域内,且q是核心点,则p-q直接密度可达。
密度可达:若有一个点的序列q0、q1、...、qk,对任何qi-(qi-1)是直接密度可达的。称从q0-qk密度可达。
密度相连:若从某核心点p出发,点q和点k都是密度可达的。则称q和点k是密度相连的。
边界点:属于某一个类的非核心点,不能发展下线了。
噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的。

7.2 算法思想

这个算法很有意思,总结8个字就是:画圈找点,发展下线
设定参数D:输入数据集;参数:指定半径;MinPts:密度阈值

1. 标记所有对象为unvisited
2. Do
3. 随机选择一个 unvited 对象 p;
4. 标记 p 为visited;
5. if p 的 e-(半径范围内) 领域内至少有 MinPts 个对象
        创建一个新簇 C,并把p添加到C;
        令 N 为 p 的 e- 领域中的对象集合
        for N 中每个点 p
            if p 是 unvisited
                标记 p 为visited
                if p 的e-领域至少有 MinPts 个对象,把这些对象添加到N;
                如果 p 还不是任何簇的成员,把 p 添加到 C;
              End for;
              输出 C;
              
      Else 标记 p 为噪声;
      Unitl 没有标记为unvisited 的对象。

参数选择
半径e:给定数据集P={p(i);i=0,1,...,n},计算点P(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序, d(k)就被称为k-距离。
MunPts: k-距离中k的值,一般取的小一些,多次尝试

7.3 优劣势

优势:

  • 不需要指定簇个数
  • 可以发现任意形状的簇
  • 擅长找到离群点
  • 两个参数就够了

劣势:

  • 高维数据有些困难(可以做降维)
  • 参数难以选择(参数对结果的影响非常大)
  • Sklearn中效率很慢(数据削减策略)

你可能感兴趣的:(机器学习(七) 聚类之DBSCAN)