日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means

發(fā)布時間:2025/3/19 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

K-Means||算法

K-Means||算法是為了解決K-Means++算法缺點而產(chǎn)生的一種算法;

主要思路是改變每次遍歷時候的取樣規(guī)則,并非按照K-Means++算法每次遍歷只獲取一個樣本,而是每次獲取K個樣本,重復該取樣操作O(logn)次(n是樣本的個數(shù)),然后再將這些抽樣出來的樣本聚類出K個點,最后使用這K個點作為K-Means算法的初始聚簇中心點。實踐證明:一般5次重復采用就可以保證一個比較好的聚簇中心點。

整體步驟

  • 在N個樣本中抽K個樣本,一共抽log(n)次,形成一個新的樣本集,一共有K*log(n)個數(shù)據(jù)。
  • 在新數(shù)據(jù)集中使用K-Means算法,找到K個聚簇中心。
  • 把這K個聚簇中心放到最初的樣本集中,作為初始聚簇中心。
  • 原數(shù)據(jù)集根據(jù)上述初始聚簇中心,再用K-Means算法計算出最終的聚簇。
  • 偽代碼

    采用了一個采樣因子l,第1步隨機初始化一個中心點,第2-6步計算出滿足概率條件的多個候選中心點C,候選中心點的個數(shù)可能大于k個,所以通過第7-8步來處理。第7步給C中所有點賦予一個權(quán)重值

    ,這個權(quán)重值表示距離x點最近的點的個數(shù)。第8步使用k-means算法聚類出這些候選點的k個聚類中心。

    Canopy算法

    Canopy算法屬于一種“粗”聚類算法,速度較快,但精度較低。 與傳統(tǒng)的聚類算法(如K-Means)不同,Canopy聚類最大的特點是不需要事先指定k值(即聚類的個數(shù)),因此具有很大的實際應用價值。

    步驟如下:

  • 給定樣本列表 以及初始距離閾值為 (T1、T2可自己定義);
  • 從列表L中任取一點P,計算P到所有聚簇中心點的距離(如果不存在聚簇中心,那么就把點P作為一個新的聚簇),并選出與聚類中心最近的距離 ;
  • 如果距離D小于T1,表示該節(jié)點屬于該聚簇,添加到該聚簇列表中。
  • 如果距離D小于T2,表示該節(jié)點不僅僅屬于該聚簇,還表示和當前聚簇中心點非常近,所以將P從列表L中刪除。
  • 如果距離D大于T1,那么節(jié)點P形成一個新的聚簇。
  • 重復步驟2-5,直到列表L為空時結(jié)束循環(huán)。
  • Canopy算法得到的最終結(jié)果的值,聚簇之間是可能存在重疊的,但是不會存在某個對象不屬于任何聚簇的情況。

    Canopy算法過程圖形說明

    Canopy+ K-Means聚類算法

    由于K-Means算法存在初始聚簇中心點敏感的問題,常用使用Canopy+K-Means算法進行模型構(gòu)建,這種形式聚類算法聚類效果良好。

    步驟

  • 先使用 Canopy算法進行“粗”聚類得到K個聚類中心點。
  • 再使用K-Means算法,并用Canopy算法得到的K個聚類中心點作為初始中心點,進行“細”聚類。
  • 優(yōu)點

  • 執(zhí)行速度快(先進行了一次聚簇中心點選擇的預處理);
  • 不需要給定K值,應用場景多;
  • 能夠緩解K-Means算法對于初始聚類中心點敏感的問題。
  • Mini Batch K-Means算法

    Mini Batch K-Means算法是K-Means算法的一種優(yōu)化變種,采用小規(guī)模的數(shù)據(jù)子集(每次訓練使用的數(shù)據(jù)集是在訓練算法的時候隨機抽取的數(shù)據(jù)子集)減少計算時間,同時試圖優(yōu)化目標函數(shù);Mini Batch K-Means算法可以減少K-Means算法的收斂時間,而且產(chǎn)生的結(jié)果效果只是略差于標準K-Means算法。

    算法步驟如下

  • 首先抽取部分數(shù)據(jù)集,使用K-Means算法構(gòu)建出K個聚簇點的模型;
  • 繼續(xù)抽取訓練數(shù)據(jù)集中的部分數(shù)據(jù)集樣本數(shù)據(jù),并將其添加到模型中,分配給距離最近的聚簇中心點;
  • 更新聚簇的中心點值;
  • 重復2-3步,直到中心點穩(wěn)定或者達到迭代次數(shù)為止。
  • Python實現(xiàn)

    import time import matplotlib.pyplot as plt import matplotlib from sklearn.cluster import MiniBatchKMeans from sklearn.datasets import make_blobs # 導入產(chǎn)生模擬數(shù)據(jù)的方法 matplotlib.rcParams['font.sans-serif'] = [u'SimHei'] matplotlib.rcParams['axes.unicode_minus'] = False# 生成模擬數(shù)據(jù) k = 5 # 給定聚類數(shù)量 X, Y = make_blobs(n_samples=1000, n_features=2, centers=k, random_state=1) s = time.time() km = MiniBatchKMeans(n_clusters = k, batch_size = 100) km.fit(X) print("用sklearn內(nèi)置的Mini Batch K-Means算法聚類耗時:", time.time() - s)label_pred = km.labels_ # 獲取聚類后的樣本所屬簇對應值 centroids = km.cluster_centers_ # 獲取簇心# 繪制Mini Batch K-Means結(jié)果 # 未聚類前的數(shù)據(jù)分布 plt.subplot(121) plt.scatter(X[:, 0], X[:, 1], s=50) plt.title("未聚類前的數(shù)據(jù)分布") plt.subplots_adjust(wspace=0.5)plt.subplot(122) plt.scatter(X[:, 0], X[:, 1], c=label_pred, s=50, cmap='viridis') plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='o', s=100) plt.title("Mini Batch K-Means算法聚類結(jié)果") plt.show()

    運行結(jié)果

    總結(jié): Mini Batch K-Means 算法比 K-Means 算法運行的時間大大減少,并且效果也差不多。

    相關(guān)鏈接

    K-Means算法python代碼

    聚類算法總結(jié)

    Canopy聚類算法

    K-Means||算法

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。