常用的几种聚类算法的时间复杂度和适应情况比较分析
Posted 用Python做数据分析
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用的几种聚类算法的时间复杂度和适应情况比较分析相关的知识,希望对你有一定的参考价值。
在无监督学习中,聚类是一个绕不开的问题,往往很多问题中都涉及到聚类分析,甚至在径向基函数的数据中心选择上也会有聚类问题,所以我们了解聚类算法的各种适应情况和时间复杂度非常有必要,可以帮助我们在合适的业务问题上选择到我们需要的算法。
【0、常用聚类算法比较】
首先我们对目前常用的,比较有代表性的,相对成熟的聚类算法的必要参数、适应情况、以及时间复杂度做个简单的树状图汇总:
【1、常用聚类算法
在不同形状的数据簇上的表现】
了解了这几种的聚类特点,我们再对这几种算法在以下不同的,各种典型特点的数据簇上的表现有个直观的感受,可以帮助我们在不同的业务问题上衡量算法的表现,提高我们聚类的预见性:
上图我们可以非常直观的观察出聚类算法对于不同形状的簇的识别,但现实业务问题中,如果不是特别的需要识别崎岖的几何形状,特别是电商领域,我们的聚类往往是基于样本之间的相似度,所以我们面对的问题,绝大多数是第三行和第四行的簇的类型。
因此(如下图),在第三行的簇类型的时候,我们希望尽可能的分辨出,在第四行的情况中,我们又不希望把一个完整的簇割裂。所以如下图黑框勾出的情况一样,均值漂移聚类 和 DBSCAN聚类脱颖而出,是我们比较值得首先学习的目标。
我们可以发现:
在对第三行的簇的识别越好,其时间复杂度越高,这给我们在分析大数据集的时候带来了困难。这也是为什么简洁的K-means聚类如此受欢迎的原因。
【2、scikit-learn:
之MiniBatch K-Means 】
值得注意的是K-MEANS算是一种比较通用的形式,除了需要我们事先指定簇的数量这个特点让我们比较头疼,它的简约的形式,和适应大多数情况的特点,也非常值得学习。
scikitlearn的MiniBatch K-Means算法使用简明举例:
1、参数和默认值概览:
sklearn.cluster.MiniBatchKMeans(n_clusters=8, init='k-means++', max_iter=100, batch_size=100, verbose=0,compute_labels=True, random_state=None, tol=0.0, max_no_improvement=10, init_size=None, n_init=3,reassignment_ratio=0.01)
2、参数详细说明如下:
n_clusters : int整形, 默认值: 8
簇的数目
max_iter : int整形
最大迭代次数
max_no_improvement : int 整形默认值: 10
基于小批量连续数的控制早停
tol : float浮点型, 默认值: 0.0
基于相对中心的平滑变化和中心位置方差归一化的变化,的早停控制。
batch_size : int 整形可选, 默认值: 100
批量的样本大小
init_size : int 整形可选, 默认值: 3 * batch_size
随机初始化的样本数,为了提高速度会牺牲一部分精度
init : {‘k-means++’, ‘random’ 或者N维数组 }, 默认值: ‘k-means++’
初始化方法
‘k-means++’ : 智能的选取簇中心,以提高性能
‘random’: 随机选取簇中心
N维数组:人为指定簇的中心
n_init : int 整形默认值=3
随机初始化尝试的数量。
compute_labels : 布尔值, 默认值=True
一旦小批量优化在合适的尺度,就为完整数据集计算标签分配
random_state : integer or numpy.RandomState, 可选
用于初始化中心的随机数生成器
reassignment_ratio : float浮点型, 默认值: 0.01
控制簇的中心被重新分配的样本最大数量计数。较高的数值意味着拥有较少样本数量的簇的中心更容易被重新分配,这样收敛更慢,但是可能会收敛出一个更好的簇。
===end===
以上是关于常用的几种聚类算法的时间复杂度和适应情况比较分析的主要内容,如果未能解决你的问题,请参考以下文章