1. 程式人生 > >[matlab] 18.matlab自帶kmeans函數的求點集的重心

[matlab] 18.matlab自帶kmeans函數的求點集的重心

fun 觀察 輸出參數 分區 進行 cti 矩陣 s函數 func

k -means聚類是一種分區方法。該函數kmeans將數據分區為k個互斥集群,並返回它為每個觀察分配的集群的索引。

與層次聚類不同,k -means聚類對實際觀察(而不是較大的相異度度量集)進行操作,並創建單個級別的聚類。這些區別意味著k -means聚類通常比大量數據的層次聚類更合適。

使用方法:
Idx=Kmeans(X,K)
[Idx,C]=Kmeans(X,K)
[Idx,C,sumD]=Kmeans(X,K)
[Idx,C,sumD,D]=Kmeans(X,K)
[…]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)

各輸入輸出參數介紹:
X :N*P的數據矩陣
K: 表示將X劃分為幾類,為整數
Idx :N*1的向量,存儲的是每個點的聚類標號
C: K*P的矩陣,存儲的是K個聚類質心位置
sumD 1*K的和向量,存儲的是類間所有點與該類質心點距離之和
D:N*K的矩陣,存儲的是每個點與所有質心的距離

C為點群的重心坐標

% 也可以用重心法求中心,不過weight加權會有誤差
x=point(:,1)‘; y=point(:,2)‘; %轉置處理
weight=1/n*ones(b,1); %權重初始化
f=@(var) sqrt((var(1)-x).^2+(var(2)-y).^2)*weight; %點距加權 最後算出val(1),val(2)位置

[var,fval]=ga(f,2); %遺傳工具箱算出最小值
x0=var(1); y0=var(2); %賦值重心坐標

[matlab] 18.matlab自帶kmeans函數的求點集的重心