MATLAB實現Kmeans聚類演算法

2021-08-30 17:45:36 字數 2319 閱讀 2981

這是我練習的第乙個機器學習的演算法,寫的比較簡單,肯定也有一些小錯誤。也參看了很多其他人的**。現在貼出來算是我學習的乙個歷程啦。

clear all;close all;clc;

data1=normrnd(0,0.25,100,2); %生成符合

data2=normrnd(1.25,0.5,100,2);

data3=normrnd(-1.25,0.5,100,2);

% 顯示資料

plot(data1(:,1),data1(:,2),'b.');

hold on;

plot(data2(:,1),data2(:,2),'r.');

plot(data3(:,1),data3(:,2),'g.');

grid on;

% 三類資料合成乙個資料類

data = [data1; data2; data3];

n=4;%設定聚類數目

[m,n]=size(data);%取矩陣的大小,m=300,n=2

cen=zeros(n,n);%設定初始聚類中心

dis=zeros(m,n,2);%設定初始存放最小歐式距離的矩陣,第一列存放距離每二列存放分類資訊

new_cen=ones(n,n);%更新後的聚類中心

% 選定初始質心

t = 1;

for i=1:n

cen(i,:)=data( randi(m,1),:);%第一次隨機產生聚類中心

endfor num=1:1000%迭代次數

for i=1:m %計算每一點的對聚類中心的距離,並選取最小的將其劃分為一類

for j=1:n

dis(i,j,1)=(data(i,1)-cen(j,1)).^2+(data(i,2)-cen(j,2)).^2;

%計算資料對某乙個聚類中心的距離

enddis(i,:,2)=min(dis(i,:,1)');%將距離矩陣的第二項取成第一項中的最小值

for j=1:n

if dis(i,j,1)==dis(i,j,2)

dis(i,:,2)=j;%將第二項的值設定成分類標號

endend

ends=0;

for i=1:n %重新分配新的中心點

for j=1:m

if dis(j,1,2)==i %如果標號一致,就將其分別一類,並加入中心值並計數

cen(i,:)=cen(i,:)+data(j,:);

s=s+1;

endend

new_cen(i,:)=cen(i,:)/(s+1); %更新中心值

s=0;

end

if norm(new_cen-cen)<0.01 %如果新質心的老質心符合很好,也結束迭代

break;

else cen= new_cen;

end

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