聚类分析(三)Mini Batch KMeans算法
????????在當前大數據的背景下,工程師們往往為了追求更短的計算時間,不得不在一定程度上減少算法本身的計算精度,我說的是在一定程度上,所以肯定不能只追求速度而不顧其它。在KMeans聚類中,為了降低計算時間,KMeans算法的變種Mini Batch KMeans算法應運而生。
????????Mini Batch KMeans算法是一種能盡量保持聚類準確性下但能大幅度降低計算時間的聚類模型,采用小批量的數據子集減少計算時間,同時仍試圖優化目標函數,這里所謂的Mini Batch是指每次訓練算法時隨機抽取的數據子集,采用這些隨機選取的數據進行訓練,大大的減少了計算的時間,減少的KMeans算法的收斂時間,但要比標準算法略差一點,建議當樣本量大于一萬做聚類時,就需要考慮選用Mini Batch KMeans算法。
????????這種對時間優化的思路不僅應用在KMeans聚類,還廣泛應用于梯度下降、深度網絡等機器學習和深度學習算法。
在sklearn.cluster 中MiniBatchKMeans與KMeans方法的使用基本是一樣的,為了便于比較,繼續使用與我上一篇博客同樣的數據集。
在MiniBatchKMeans中可配置的參數如下:
class?sklearn.cluster.MiniBatchKMeans(n_clusters=8,?init='kmeans++',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)通過參數batch_size可以設置Mini Batch的大小,這里默認值為100.
導入包
from sklearn.cluster import MiniBatchKMeans import demo1 import numpy as np import matplotlib.pyplot as plt畫出數據的散點圖和聚類中心的位置
def draw_pic(data_list):# 畫出散點圖for x in range(len(data_list)):plt.scatter(data_list[x][0], data_list[x][1], s=30, c='b', marker='.')def draw_cluster_centers(centers_mat):# 畫出聚類中心for k in range(len(centers_mat)):plt.scatter(centers_mat[k][0], centers_mat[k][1], s=60, c='r', marker='D')執行程序,進行Mini Batch KMeans聚類,為了方便,對數據集的處理我調用了我上一篇博客中的數據矩陣處理函數。
if __name__ == '__main__':data_Set = demo1.file2matrix('testSet.txt', '\t')draw_pic(data_Set)k = 4 # 確定聚類中心的數目# 執行KMeans算法minibatchkmeans = MiniBatchKMeans(n_clusters=k, batch_size=50)minibatchkmeans.fit(np.mat(data_Set))draw_cluster_centers(minibatchkmeans.cluster_centers_)plt.show()最終得出結果:
從結果來看,Mini Batch KMeans算法的聚類效果還是不錯的,但我覺得這并不能說明什么問題,因為我的數據量太少了,以后有時間把爬蟲技術弄熟練,再做一個數據量大的吧。
轉載于:https://my.oschina.net/u/3888421/blog/2209122
總結
以上是生活随笔為你收集整理的聚类分析(三)Mini Batch KMeans算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kk6.0 服务器信息 端口,KK的服务
- 下一篇: 从Richard Young教授的系列研