Matlab實現k means聚類演算法

2021-06-21 06:45:17 字數 1590 閱讀 3475

k-means是聚類中的乙個十分經典的演算法,具體的思想可以參考andrew ng的講義《the k-means clustering algorithm》,這裡不再贅述。

需要用到matlab中的核心函式kmeans,具體用法可以參考matlab命令: doc kmeans

idx = kmeans(x,k)

[idx,c] = kmeans(x,k)

[idx,c,sumd] = kmeans(x,k)

[idx,c,sumd,d] = kmeans(x,k)

partitions the points in the n-by-p data matrixxintokclusters.  rows of x correspond to points, columns correspond to variables. 

n-by-1 vectoridxcontaining the cluster indices of each point. 

k cluster centroid locations in the k-by-p matrixc.

within-cluster sums of point-to-centroid distances in the 1-by-k vectorsumd.

distances from each point to every centroid in the n-by-k matrixd.

還有一些可選的引數,包括:'distance', 'options', 'replicates'等。

'distance'表示距離,預設為歐幾里得距離,還包括絕對距離,cos距離,海明距離等。

'options'可以通過statset命令設定操作,例如顯示迭代的結果。

'replicates'用於設定重複聚類的次數。

下面給出乙個具體的例子:

x = [randn(100,2)+ones(100,2);randn(100,2)-ones(100,2)]; %待聚類樣本

opts = statset('display','final'); %設定'options',最後顯示迭代結果

[idx,ctrs] = kmeans(x,2, 'replicates',5, 'options',opts);%將x聚為兩類,進行5次,最後顯示5次聚類的結果

%下面為資料的視覺化,可以參考

plot(x(idx==1,1),x(idx==1,2),'r.','markersize',12)

hold on

plot(x(idx==2,1),x(idx==2,2),'b.','markersize',12)

plot(ctrs(:,1),ctrs(:,2),'kx','markersize',12,'linewidth',2)

plot(ctrs(:,1),ctrs(:,2),'ko','markersize',12,'linewidth',2)

legend('cluster 1','cluster 2','centroids','location','nw')

kmeans聚類及Matlab實現

kmeans k均值聚類 是一種常用的聚類演算法,因其簡單且效能還算良好而受廣泛應用。kmeans聚類的中心思想是 確定k個類,計算模式特徵向量到每個聚類中心的 距離 將特徵向量歸併到距離最小的聚類中心所在的類中。把每一類的平均向量特徵的均值作為新的類心。最後,使得樣本與類均值的誤差平方和最小。步驟...

MATLAB實現Kmeans聚類演算法

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

Matlab實現K means聚類函式

function label my kmeans x,k m,n size x label zeros m,1 初始化label向量 u index randperm m,k 生成k個 1,m 範圍的隨機的不重複的正整數 u x u index,初始化均值向量 while true 迭代操作 dis...