k means聚類演算法C 實現

2022-01-10 06:34:54 字數 1209 閱讀 2860

clustering 中文翻譯作「聚類」,簡單地說就是把相似的東西分到一組,同 classification (分類)不同,對於乙個 classifier ,通常需要你告訴它「這個東西被分為某某類」這樣一些例子,理想情況下,乙個 classifier 會從它得到的訓練集中進行「學習」,從而具備對未知資料進行分類的能力,這種提供訓練資料的過程通常叫做 supervised learning (監督學習)。而在聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起,因此,乙個聚類演算法通常只需要知道如何計算相似 度就可以開始工作了,因此 clustering 通常並不需要使用訓練資料進行學習,這在 machine learning 中被稱作 unsupervised learning (無監督學習)。

在資料探勘中, k-means聚類演算法是一種 cluster analysis (聚類分析)的演算法,是一種非常簡單地基於距離的聚類演算法,認為每個cluster(類)由相似的點組成而這種相似性由距離來衡量,不同cluster間的點應該盡量不相似,每個cluster都會有乙個「重心」;另外它也是一種排他的演算法,即任意點必然屬於某一cluster且只屬於該cluster。

這個演算法實現過程很簡單,如下圖所示:

上圖中,a, b, c, d, e 是五個在圖中點。而灰色的點是種子點,也就是用來找cluster的「重心」。有兩個種子點,所以k=2。

k-means演算法步驟:

典型的演算法如下,它是一種迭代的演算法:

(1)根據事先給定的k值建立初始劃分,得到k個cluster,比如,可以隨機選擇k個點作為k個cluster的重心;

(2)計算每個點到各個cluster重心的距離,將它加入到最近的那個cluster;

(3)重新計算每個cluster的重心;

(4)重複過程2~3,直到各個cluster重心在某個精度範圍內不變化或者達到最大迭代次數。

別看演算法簡單,很多複雜演算法的實際效果或許都不如它,而且它的區域性性較好,容易並行化,對大規模資料集很有意義;演算法時間複雜度是:o(nkt),其中:n 是聚類點個數,k 是cluster個數,t 是迭代次數。

k-means演算法主要有兩個最重大的缺陷,都和初始值有關:

k-means演算法c++實現:k-means.rar

github**:

****於網路,稍作修改,並做了簡單測試。

kmeans聚類 c 實現

num class 聚類數 num data 資料個數 dimension 資料維度 每個資料是多少維的 data 待聚類資料指標 cluster center 聚類中心指標 max error 前後兩次誤差降低到此值迭代終止 max iters 最大迭代次數 1 隨機初始化聚類中心 2 根據聚類中...

Matlab實現k means聚類演算法

k means是聚類中的乙個十分經典的演算法,具體的思想可以參考andrew ng的講義 the k means clustering algorithm 這裡不再贅述。需要用到matlab中的核心函式kmeans,具體用法可以參考matlab命令 doc kmeans idx kmeans x,k...

MATLAB實現Kmeans聚類演算法

這是我練習的第乙個機器學習的演算法,寫的比較簡單,肯定也有一些小錯誤。也參看了很多其他人的 現在貼出來算是我學習的乙個歷程啦。clear all close all clc data1 normrnd 0,0.25,100,2 生成符合 data2 normrnd 1.25,0.5,100,2 da...