使用matlab進行K means聚類

2021-10-08 15:44:40 字數 4109 閱讀 3259

使用matlab對輸入資料進行k-means聚類。演算法的思想來自基於密度方法的聚類

% 生成資料

mu1 =[20

20];s1

=[100

;010]

;data1 =

mvnrnd

(mu1,s1,

100)

;mu2 =[80

80];s2

=[200

;030]

;data2 =

mvnrnd

(mu2,s2,

200)

;mu3 =[20

80];s3

=[200

;010]

;data3 =

mvnrnd

(mu3,s3,

100)

;mu4 =[80

20];s4

=[200

;010]

;data4 =

mvnrnd

(mu4,s4,

100)

;data =

[data1; data2; data3; data4]

;% image =

imread

('data.png');

% image =

image(:

,:,1

);%[x,y]

=find

(image ==0)

;% data=

[x,y];%

% 畫出原始資料

figure(1

);plot

(data(:

,1),

data(:

,2),

'k.');

grid on

daspect([

111]

);xlabel

('x');

ylabel

('y');

title

('原始輸入點');

hold on;

%% 初始聚類結果

temp =

randperm

(size

(data,1)

);for i =

1: k

center

(i,:)=

data

(temp

(i),:)

;color

(i,:)=

[rand()

,rand()

,rand()

];endfor i =

1: k

x_dist(1

,:)=

data(:

,1)-

center

(i,1);

y_dist(2

,:)=

data(:

,2)-

center

(i,2);

distance =

sqrt

(x_dist(1

,:).

^2+y_dist(2

,:).

^2);

% 歐氏距離

dist(:

,i)= distance';

end[mindist, cluster]

=min

(dist,

,2);

err_rec(1

)=mean

(mindist)

;disp([

'誤差err='

,num2str

(err_rec(1

))])

;figure(2

);for i =

1: k

index = cluster==i;

plot

(data

(index,1)

,data

(index,2)

,'.'

,'color'

,color

(i,:),

'marke***cecolor'

,color

(i,:))

; hold on

plot

(center

(i,1),

center

(i,2),

'k*');

endhold off

grid on

daspect([

111]

);pause

(0.1);

iteration =1;

while(1

)for i =

1: k

index = cluster==i;

center

(i,:)=

mean

(data

(index,:)

);x_dist(1

,:)=

data(:

,1)-

center

(i,1);

y_dist(2

,:)=

data(:

,2)-

center

(i,2);

distance =

sqrt

(x_dist(1

,:).

^2+y_dist(2

,:).

^2);

% 歐氏距離

dist(:

,i)= distance';

end[mindist, cluster]

=min

(dist,

,2);

err_rec

(iteration+1)

=mean

(mindist)

;

h =figure(2

);for i =

1: k

index = cluster==i;

plot

(data

(index,1)

,data

(index,2)

,'.'

,'color'

,color

(i,:),

'marke***cecolor'

,color

(i,:))

; hold on

plot

(center

(i,1),

center

(i,2),

'k*');

endhold off

grid on

daspect([

111]

);pause

(0.1);

drawnow

disp([

'迭代次數ieration='

,num2str

(iteration)])

;disp([

'誤差err='

,num2str

(err_rec

(iteration+1)

)]);

if iteration >3&&

err_rec

(iteration)

-err_rec

(iteration+1)

< step_tolerance

disp

('————————————————————————————');

disp

('結束聚類');

break

enditeration = iteration +1;

endfigure;

plot(0

:iteration,err_rec)

;grid on

MATLAB 使用 Matlab 進行曲線擬合

在matlab中,用polyfit函式來求得最小二乘擬合多項式的係數,再用polyval函式按所得的多項式計算所給點上的函式近似值。x linspace 0,2 pi,20 y sin x p polyfit x,y,3 y1 polyval p,x plot x,y,o x,y1,legend r...

Matlab 使用GPU進行濾波運算

從matlab2013版本開始,matlab將可以直接呼叫gpu進行平行計算,而不再需要安裝gpumat庫。這一改動的好處是原有的matlab內建函式都可以直接運用,只要資料格式是gpuarray格式的,那麼計算過程會自動的呼叫gpu進行計算 具體操作起來,只要知道下面幾個函式就可以像編寫簡單的m檔...

使用matlab對輸入資料進行卡爾曼濾波

使用matlab對輸入資料進行卡爾曼濾波。簡單說明一下程式中的資料。假設一輛汽車從初始點 0,10 開始行駛,初始速度沿y軸正方向10m s。然後在觀測途中向右先加速再減速變換車道。整個過程其實有x軸座標,y軸座標,x軸速度,y軸速度以及x軸的加速度這5個物理量。但在卡爾曼濾波時我只用了x軸座標,y...