Matlab實現K means聚類函式

2021-10-17 10:59:26 字數 1422 閱讀 7532

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

)%迭代操作

distance=

sqrt

(u.^2*

ones

(n,m)

+ones

(size

(u))

*(x').^2-2*u*x');

%生成每個樣本與k個聚類中心的距離矩陣

[~,min_index]

=min

(distance,

,1);

%根據距離最近,確定樣本的簇標記

minmat =

zeros

(size

(distance));

postionvec =

1:m;

pos_num =k*

(postionvec-1)

+min_index;

%生成矩陣的單下標索引

minmat

(pos_num)=1

;%將每個樣本到聚類中心的最小距離對應位置置1

cluster_sum = minmat*x;

%簇中樣本求和

cluster_num =

sum(minmat,2)

;%簇中樣本數量

dim_num=

size

(cluster_sum,2)

; extendmat =

repmat

(cluster_num,

1,dim_num)

;%為實現矩陣的點除,進行矩陣的複製

newcmat = cluster_sum.

/extendmat;

%計算均值向量

if(all

(abs

(newcmat(:

)-u(

:))<

1e-6))

%迭代退出條件

[~,label]

=max

(minmat,

,1);

%聚類結果

break

; end

u=newcmat;

%更新均值向量

end label=label';分類標記

end在這裡插入**片

Matlab實現k means聚類演算法

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

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...