K-Means++算法与Mini Batch K-Mwans算法

K-Means++算法

算法步骤

K-Means算法对初始质心是敏感的,不同的初始质心,可能会导致不同的聚类效果(SSE)与收敛速度。虽然随机初始化多组质心,可以缓解这一问题,但是,这通常限于聚类数量(簇)较少的情况,如果聚类数量较多,随机初始化多组质心的方式可能就不会有效了。
鉴于此,我们完全可以在选择初始质心上进行优化,这就是K-Means++算法。
K-Means++与K-Means的区别在于选择初始质心的方式不同,对于K-Means,其使用完全随机的方式来选择初始质心,对于K-Means++,其选择初始质心的步骤如下:

  1. 从训练数据中随机选择一个样本,作为初始质心。
  2. 对于任意一个非质心样本x(i),计算x(i)与现有最近质心的距离D(x(i))。
  3. 根据概率D(x(i))2 / ∑ mj=1D(x(i))^2 来选择下一个质心x(i),m为非质心样本的数量。
  4. 重复步骤2与3,直到选择k个质心为止。

当选择好初始质心后,剩余的计算方式,K-Means++与K-Means是相同的。

程序演示

在sklearn中,已经实现了K-Means++算法,只需要将init参数设置为‘k-means++’即可(默认值)。

kmeans = KMeans(n_clusters=4, init='k-means++')
kmeans.fit(x)
plot_cluster(kmeans,x)

在这里插入图片描述

Mini Batch K-Means算法

算法步骤

K-Means算法每次迭代都会使用所有数据参与运算,当数据集较大时,该算法可能会花费较多的计算时间。Mini Batch K-Means算法(小批量K-Means算法)是K-Means算法的一种变化,与K-Means算法具有相同的优化目标(目标函数)。不同的是,Mini Batch K-Means算法每次迭代使用小批量训练样本,逐批次累计的方式进行计算,这样可以大大减少计算时间,在聚类效果上,通常只会略差于K-Means算法。
Mini Batch K-Means算法步骤如下:

  1. 从数据集中随机选择部分数据,使用K-Means算法在这部分随机数据上聚类,获取质心。
  2. 从数据集中随机选择部分数据,形成一个批次,将该批次数据分配给最近的质心。
  3. 根据现有的数据集(当前批次数据+所有以前的数据)更新质心。
  4. 重复步骤2与3,直到质心变化小于指定的阈值或者到达最大迭代次数为止。
程序演示

生成数据集
在sklearn中,我们可以使用make_blobs方法生成用于聚类的数据集。

import time

import pandas as pd
from sklearn.cluster import MiniBatchKMeans, KMeans
from sklearn.metrics.pairwise import pairwise_distances_argmin
from sklearn.datasets import make_blobs

centers = [[1,1],[-1,-1],[1,-1]]
#生成用于聚类的数据。
#n_samples:样本数量。
#n_features:特征数量。
#centers:聚类中心。
#cluster_std:簇的标准差。可以统一指定,也可以为每个簇指定不同的标准差。
#random_state:随机种子,用来生成样本数据。
x, y = make_blobs(n_samples=3000, n_features=2, centers=centers,
                  cluster_std=0.7, random_state=
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值