聚类算法之Mini Batch K-Means 算法

定义

Mini Batch K-Means算法是K-Means算法的一种优化方案,采用小批量的数据子集减小计算时间,同时仍试图优化目标函数,这里所谓的小批量是指每次训练算法时所随机抽取的数据子集,采用这些随机产生的子集进行训练算法,大大减小了计算时间,与其他算法相比,减少了k-均值的收敛时间,小批量k-均值产生的结果,一般只略差于标准算法。

Mini Batch KMeans使用了一个种叫做Mini Batch(分批处理)的方法对数据点之间的距离进行计算。Mini Batch的好处是计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本量少,所以会相应的减少运行时间,但另一方面抽样也必然会带来准确度的下降。

基本思想

Mini Batch KMeans算法是一种能尽量保持聚类准确性下但能大幅度降低计算时间的聚类模型,采用小批量的数据子集减少计算时间,同时仍试图优化目标函数,这里所谓的Mini Batch是指每次训练算法时随机抽取的数据子集,采用这些随机选取的数据进行训练,大大的减少了计算的时间,减少的KMeans算法的收敛时间,但要比标准算法略差一点,建议当样本量大于一万做聚类时,就需要考虑选用Mini Batch KMeans算法。

算法描述

Mini Batch K-Means每次迭代不采用所有样本,而是每次等量的采样,然后进行中心节点的更新。与K均值算法相比,数据的更新是在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算

Mini Batch K-Means比K-Means有更快的 收敛速度,但同时也降低了聚类的效果,但是在实际项目中却表现得不明显

该算法的迭代步骤有两步:

1:从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心

2:更新质心

 

参数解释

 

  •  n_init :用不同的初始化质心运行算法的次数。这里和KMeans类意义稍有不同,KMeans类里的n_init是从相同训练集数据中随机初始化质心。而MiniBatchKMeans类的n_init则是每次用不一样的采样数据集来跑不同的初始化质心运行。默认为3。

  • compute_labels : 计算训练样本的类。

  • reassignment_ratio : 某个类别质心被重新赋值的最大次数比例,为了控制算法的运行复杂度。分母为样本总数。如果取值较高的话算法收敛时间可能会增加,尤其是那些暂时拥有样本数较少的质心。默认是0.01。

  •   max_no_improvement :多少次迭代中质心没有变化,算法终止。默认10。

  •  batch_size:采样数据集的大小,默认100,通常数据集较大时需要提高这个数值。

  •  init_size:用来候选质心的样本数据集大小,默认为batch_size的三倍。

与K-Means算法相比,Mini Batch K-Means中多了一个方法,partial_fit,即可以只用一个batch_size进行训练。其他与K-Means相同

应用场景

在当前大数据的背景下,工程师们往往为了追求更短的计算时间,不得不在一定程度上减少算法本身的计算精度,我说的是在一定程度上,所以肯定不能只追求速度而不顾其它。

参考文献:

https://my.oschina.net/u/3888421/blog/2209122

https://blog.csdn.net/Gamer_gyt/article/details/51244850

https://blog.csdn.net/qq_34104548/article/details/79342598

https://www.dataivy.cn/blog/%E9%80%82%E5%90%88%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%9A%84%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95mini-batch-k-means/

你可能感兴趣的:(2019年8月)