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