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 5using 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放在一起。比如上面的星星,聚...