k-means演算法是一種聚類演算法,所謂聚類,即根據相似性原則,將具有較高相似度的資料物件劃分至同一類簇,將具有較高相異度的資料物件劃分至不同類簇。聚類與分類最大的區別在於,聚類過程為無監督過程,即待處理資料物件沒有任何先驗知識,而分類過程為有監督過程,即存在有先驗知識的訓練資料集。
k-means演算法中的k代表類簇個數,means代表類簇內資料物件的均值(這種均值是一種對類簇中心的描述),因此,k-means演算法又稱為k-均值演算法。k-means演算法是一種基於劃分的聚類演算法,以距離作為資料物件間相似性度量的標準,即資料物件間的距離越小,則它們的相似性越高,則它們越有可能在同乙個類簇。資料物件間距離的計算有很多種,k-means演算法通常採用歐氏距離來計算資料物件間的距離。流程圖如下:
1)從n個樣本隨機選取k個樣本作為中心點
2)對剩餘的每個樣本測量其到每個中心點的距離,並把它歸到最近的中心點的類
3)重新計算已經得到的各個類的中心點
4)迭代2~3步直至新的中心點與原中心點相等或小於指定閾值,演算法結束
#include"stdio.h"
#include"stdlib.h"
#include#includeusing namespace std;
#define n 11
#define k 3
typedef structpoint;
point point[n] = , , , , ,
, , , , ,
};int center[n];
point mean[k];
float getdistance(point point1, point point2);
void cluster();
float gete();
void getmean(int center[n]);
int main()
printf("the total number of cluster is:%d\n", number);
system("pause");
return 0;
}//計算距離函式,歐式距離
float getdistance(point point1, point point2)
//聚類函式
void cluster()
float min = 9999.0;
for (int j = 0; j < k; j++)
}printf("(%.0f,%.0f)\t in cluster-%d\n", point[i].x, point[i].y, center[i] + 1);
}}//聚類後誤差計算函式
float gete()
}sum += cnt;
}return sum;
}//重新計算聚類中心
void getmean(int center[n])
}mean[i].x = sum.x / count;
mean[i].y = sum.y / count;
}for (int i = 0; i < k; i++)
}
結果顯示:
聚類演算法 近鄰聚類演算法
time is always too short for those who need it,but for those who love,it lasts forever.dracula untold 近鄰聚類法同樣是一種基於距離閾值的聚類演算法。coding utf 8 近鄰聚類演算法的pyth...
聚類演算法 層次聚類演算法
層次聚類演算法 hierarchical clustering method 又稱為系統聚類法 分級聚類法。層次聚類演算法又分為兩種形式 凝聚層次聚類 首先將每個物件作為乙個簇,然後合併這些原子簇為越來越大的簇,直到某個終結條件被滿足。層次聚類 首先將所有物件置於乙個簇中,然後逐漸細分為越來越小的簇...
聚類演算法 什麼是聚類
聚類分析或聚類演算法就是通過一些方法或手段使資料集集聚成不同的類別,或者叫 簇。簇內部每乙個單位都是相似的。簇與簇之間都是不相似的。但是聚類其實是一種思想,它不是一種具體的方法。這裡千萬不要搞混。但是可以實現聚類的演算法有很多種。我們通常就使用這些演算法來實現聚類的。比如 k means就是最為經典...