K means演算法介紹及C 語言實現

2021-06-26 22:34:59 字數 1402 閱讀 3484

k-means演算法是輸入聚類個數k,以及包含 n個資料物件的資料庫,輸出滿足方差最小標準的k個聚類。

基本簡介k-means

演算法接受輸入量 k ;然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個「中心物件」(引力中心)來進行計算的。

k-means 演算法基本步驟(1)

從 n個資料物件任意選擇 k 個物件作為初始聚類中心;(2) 根據每個聚類物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;(3) 重新計算每個(有變化)聚類的均值(中心物件);(4) 計算標準測度函式,當滿足一定條件,如函式收斂時,則演算法終止;如果條件不滿足則回到步驟(2)。

k-means演算法c++實現過程示例

#include

#include

#include
#define k 5

using namespace std;

//計算兩元組的歐式距離

float getdist(element e1,element e2)

// 根據質心,決定當前元組屬於哪個簇

int clusterofelement(element means,element elem)

oldvar = newvar;

newvar = getvar(clusters,means); //計算新的準則函式值

for (i = 0; i < k; i++) //清空每個簇

//根據新的質心獲得新的簇

for(i=0;i!=elems.size();++i)

} }//獲取距離k個質心距離最近的點的索引

int getindex(vectorclusters,element means)

{ //getdist(element e1,element e2)

int index=clusters.at(0).index;

float temp=getdist(means,clusters.at(0));

for(int i=0;idata;

element ele;
for(int i=0;iclusters[k];

element means[k];

kmeans(data,clusters,means);

file *kmeans=fopen("kmeans.txt","w");// 輸出k個簇中的資料

for(int i=0;i

c語言實現k means演算法

pree1.cpp 定義控制台應用程式的入口點。include stdafx.h include include include define dim 784 定義資料的最大維數 define num 10000 定義資料的最大數量 define class 10 定義最大聚類數 int initi...

C語言實現k means演算法

k means主要思想是在給定k值和若干樣本 點 的情況下,把每個樣本 點 分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據乙個類簇內的所有點重新計算該類簇的中心點 取平均值 然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。自定義的資料...

K Means演算法介紹

參考文章 聚類屬於無監督學習,回歸 樸素貝葉斯 svm等都是有類別標籤y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集 x,y,z 聚類的目的是找到每個樣本x潛在的類別y,並將同類別y的樣本x放在一起。比如上面的星星,聚...