二、DBSCAN

  1. DBSCANscikit-learn提供的一种密度聚类模型。其原型为:

    1. class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric='euclidean',
    2. metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)
    • eps二、DBSCAN - 图1 参数,用于确定邻域大小。

    • min_samples二、DBSCAN - 图2 参数,用于判断核心对象。

    • metric:一个字符串或者可调用对象,用于计算距离。

      如果是字符串,则必须是metrics.pairwise.calculate_distance中指定的。

    • metric_params:一个字典,当metric 为可调用对象时,为metric 提供关键字参数。

    • algorithm:一个字符串,用于计算两点间距离并找出最近邻的点。可以为:

      • 'auto':由算法自动选取合适的算法。
      • 'ball_tree':用ball树来搜索。
      • 'kd_tree':用kd树来搜索。
      • 'brute':暴力搜索。
    • leaf_size:一个整数,用于指定当algorithm=ball_tree或者kd_tree时,树的叶结点大小。

      该参数会影响构建树、搜索最近邻的速度,同时影响存储树的内存。

    • p:一个浮点数,指定闵可夫斯基距离的 二、DBSCAN - 图3 值。

    • n_jobs:指定并行度。

  2. 属性:

    • core_sample_indices_:一个形状为[n_core_samples,] 的数组,给出了核心样本在原始训练集中的位置。

    • components_:一个形状为[n_core_samples,n_features] 的数组,给出了核心样本的一份拷贝

    • labels_:一个形状为[n_samples,] 的数组,给出了每个样本所属的簇标记。

      对于噪音样本,其簇标记为 -1。

  3. 方法:

    • fit(X[, y, sample_weight]):训练模型。
    • fit_predict(X[, y, sample_weight]):训练模型并执行聚类,返回每个样本所属的簇标记。
  4. 考察 二、DBSCAN - 图4 参数的影响:

    • ARI指数随着 二、DBSCAN - 图5 的增长,先上升后保持平稳最后断崖下降。

      断崖下降是因为产生的训练样本的间距比较小,最远的两个样本点之间的距离不超过 30。当 二、DBSCAN - 图6 过大时,所有的点都在一个邻域中。

    • 核心样本数量随着 二、DBSCAN - 图7 的增长而上升。

      这是因为随着 二、DBSCAN - 图8 的增长,样本点的邻域在扩展,则样本点邻域内的样本会更多,这就产生了更多满足条件的核心样本点。

      但是样本集中的样本数量有限,因此核心样本点数量的增长到一定数目后稳定。

    DBSCAN_epsilon

  5. 考察 二、DBSCAN - 图10 参数的影响:

    • ARI指数随着 二、DBSCAN - 图11 的增长,平稳的下降。

    • 核心样本数量随着 二、DBSCAN - 图12 的增长基本上线性下降。

      这是因为随着 二、DBSCAN - 图13 的增长,样本点的邻域中必须包含更多的样本才能使它成为一个核心样本点。因此产生的核心样本点越来越少。

    DBSCAN_min_samples