K means聚類演算法

2021-09-26 23:43:08 字數 3091 閱讀 2892

k-means聚類演算法

簡介

k均值聚類演算法(k-means clustering algorithm)是一種迭代求解的聚類分析演算法,其步驟是隨機選取k個物件作為初始的聚類中心,然後計算每個物件與各個種子聚類中心之間的距離,把每個物件分配給距離它最近的聚類中心。聚類中心以及分配給它們的物件就代表乙個聚類。每分配乙個樣本,聚類的聚類中心會根據聚類中現有的物件被重新計算。這個過程將不斷重複直到滿足某個終止條件。終止條件可以是沒有(或最小數目)物件被重新分配給不同的聚類,沒有(或最小數目)聚類中心再發生變化,誤差平方和區域性最小。

核心思想

通過迭代尋找k個類簇的一種劃分方案,使得用這k個類簇的均值來代表相應各類樣本時所得的總體誤差最小。

k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。

k-means演算法的基礎是最小誤差平方和準則,

其代價函式是:

μc(i)表示第i個聚類的均值。

各類簇內的樣本越相似,其與該類均值間的誤差平方越小,對所有類所得到的誤差平方求和,即可驗證分為k類時,各聚類是否是最優的。

上式的代價函式無法用解析的方法最小化,只能有迭代的方法。

演算法步驟

先隨機選取k個物件作為初始的聚類中心。然後計算每個物件與各個種子聚類中心之間的距離,把每個物件分配給距離它最近的聚類中心。聚類中心以及分配給它們的物件就代表乙個聚類。一旦全部物件都被分配了,每個聚類的聚類中心會根據聚類中現有的物件被重新計算。這個過程將不斷重複直到滿足某個終止條件。終止條件可以是以下任何乙個:

1)沒有(或最小數目)物件被重新分配給不同的聚類。

2)沒有(或最小數目)聚類中心再發生變化。

3)誤差平方和區域性最小。

偽**

選擇k個點作為初始質心。

重複將每個點指派到最近的質心,形成k個簇 重新計算每個簇的質心 until 質心不發生變化

對這9個樣本值聚類

演算法**實現

1 #include2 #include3 #include4 #include5 using namespace std;

6 typedef unsigned int uint;

7 8 struct cluster

9 ;13 double cal_distance(vectora, vectorb)

14 23 return pow(val, 0.5);

24 }

25 vectork_means(vector> trainx, uint k, uint maxepoches)

26 40

41 /*多次迭代直至收斂,本次試驗迭代100次*/

42 for (uint it = 0; it < maxepoches; it++)

43

49 /*求出每個樣本點距應該屬於哪乙個聚類*/

50 for (uint j = 0; j < row_num; j++)

51

63 }

64 clusters[c].samples.push_back(j);

65 }

66 67 /*更新聚類中心*/

68 for (uint i = 0; i < k; i++)

69

80 }

81 }

82 }

83 return clusters;

84 }

85 86 int main()

87 聚類

90 double data = 1.0;

91 for (uint i = 0; i < 9; i++)

92

97 98 /*k-means聚類*/

99 vectorclusters_out = k_means(trainx, 3, 100);

100

101 /*輸出分類結果*/

102 for (uint i = 0; i < clusters_out.size(); i++)

103

112 cout << "]" << endl;

113

114 /*子類樣本點*/

115 cout << "\t" << "samples:\n";

116 for (uint k = 0; k < clusters_out[i].samples.size(); k++)

117

124 cout << "]\n";

125 }

126 }

127 return 0;

128 }

執行結果

優缺點

優點1)原理比較簡單,實現也是很容易,收斂速度快。

2)聚類效果較優。

3)演算法的可解釋度比較強。

4)主要需要調參的引數僅僅是簇數k。

缺點1)採用迭代方法,得到的結果只是區域性最優。

2)如果各隱含類別的資料不平衡,比如各隱含類別的資料量嚴重失衡,或者各隱含類別的方差不同,則聚類效果不佳。

總結

這個演算法的大概意思就是「物以類聚,人以群分」,依靠距離去聚集,然後選出質心,反覆迭代,直到距離變化不大,直到到達目標,演算法就終止了,還是比較容易理解的。

K Means聚類演算法

k means聚類演算法 intergret kmeans演算法的基本思想是初始隨機給定k個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。k means聚類演算法主要分為三個步驟 1 第一步是為待聚類...

聚類演算法 K means

演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...

k means聚類演算法

說到聚類,得跟分類區別開來,分類是按人為給定的標準將樣本歸到某個類別中去,在機器學習中多是監督學習,也就是訓練樣本要給標籤 正確的類別資訊 而聚類是在某種規則下自動將樣本歸類,在機器學習中是無監督學習,不需要提前給樣本打標籤。k means聚類演算法,就是在某種度量方式下,將樣本自動劃分到k個類別中...