聚类k-means++、k-means参数、Mini Batch K-Means

 我来答
机器1718
2022-07-01 · TA获得超过6914个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:170万
展开全部

1.1 KMeans介绍

k-means 优缺点:

1.算法快速、简单;

2.对大数据集有较高的效率并且是可伸缩性的;

3.时间复杂度近于线性,而且适合挖掘大规模数据集。K-Means聚类算法的时间复杂度是O(n×k×t) ,其中n代表数据集中对象的数量,t代表着算法迭代的次数,k代表着簇的数目 。计算复杂度在最坏的情况下为 O(n^(k+2/p)),其中n是样本量,p是特征个数。

注 在实践中,k-means算法时非常快的,属于可实践的算法中最快的那一类。但是它的解只是由特定初始值所产生的局部解。所以为了让结果更准确真实,在实践中要用不同的初始值重复几次才可以。

k-means的缺点:

1、在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。

2、 在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果,这也成为 K-means算法的一个主要问题。

3、从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。所以需要对算法的时间复杂度进行分析、改进,提高算法应用范围。

对于上述的初始聚类中心的选择可以用**k-means++**来解决

1.2 KMeans() 参数

参数:

n_clusters:整形,缺省值=8 【生成的聚类数,即产生的质心(centroids)数。】

max_iter:整形,缺省值=300 ,执行一次k-means算法所进行的最大迭代数。

n_init:整形,缺省值=10 ,用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。

init:有三个可选值:’k-means++’, ‘random’,或者传递一个ndarray向量。

此参数指定初始化方法,默认值为 ‘k-means++’。

(1)‘k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛(即上文中的k-means++介绍)

(2)‘random’ 随机从训练数据中选取初始质心。

(3)如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。

precompute_distances:三个可选值,‘auto’,True 或者 False。

预计算距离,计算速度更快但占用更多内存。

(1)‘auto’:如果 样本数乘以聚类数大于 12million 的话则不预计算距离。This corresponds to about 100MB overhead per job using double precision.

(2)True:总是预先计算距离。

(3)False:永远不预先计算距离。

tol:float形,默认值= 1e-4 与inertia结合来确定收敛条件。

n_jobs:整形数。 指定计算所用的进程数。内部原理是同时进行n_init指定次数的计算。

(1)若值为 -1,则用所有的CPU进行运算。若值为1,则不进行并行运算,这样的话方便调试。

(2)若值小于-1,则用到的CPU数为(n_cpus + 1 + n_jobs)。因此如果 n_jobs值为-2,则用到的CPU数为总CPU数减1。

random_state:整形或 numpy.RandomState 类型,可选

用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。此参数默认值为numpy的随机数生成器。

copy_x:布尔型,默认值=True

当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据 上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。

属性:

cluster_centers_:向量,[n_clusters, n_features] (聚类中心的坐标)

Labels_: 每个点的分类

inertia_:float形 ,每个点到其簇的质心的距离之和。

Methods:

fit(X[,y]): 计算k-means聚类。

fit_predictt(X[,y]): 计算簇质心并给每个样本预测类别。

fit_transform(X[,y]): 计算簇并 transform X to cluster-distance space。

get_params([deep]): 取得估计器的参数。

predict(X):predict(X) 给每个样本估计最接近的簇。

score(X[,y]): 计算聚类误差

set_params(params): 为这个估计器手动设定参数。

transform(X[,y]): 将X转换为群集距离空间。 在新空间中,每个维度都是到集群中心的距离。 请注意,即使X是稀疏的,转换返回的数组通常也是密集的。

k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

2.1 算法步骤

(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心

(2)对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)

(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大

(4)重复2和3直到k个聚类中心被选出来

(5)利用这k个初始的聚类中心来运行标准的k-means算法

从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:

(1)先从我们的数据库随机挑个随机点当“种子点”

(2)对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

(3)然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

(4)重复2和3直到k个聚类中心被选出来

(5)利用这k个初始的聚类中心来运行标准的k-means算法

可以看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。

3.1 介绍

在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。

顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。

在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。那么这batch size个样本怎么来的?一般是通过无放回的随机采样得到的。

为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
富港检测东莞有限公司
2024-12-25 广告
ISTA3L是一个基于研究、数据驱动的测试协议,它模拟了由零售公司完成的产品订单被直接运送给消费者时所经历的危险,它允许用户评估包装产品的能力,以承受运输和处理包装产品时所经历的供应链危险,从接收到任何电子商务零售商履行操作,直到最终消费者... 点击进入详情页
本回答由富港检测东莞有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式