📄 kmeans.m
字号:
function [model,y] = kmeans(X,num_centers,Init_centers)% KMEANS K-means clustering algorithm.% % Synopsis:% [model,y] = kmeans(X,num_centers)% [model,y] = kmeans(X,num_centers,Init_centers)%% Description:% [model,y] = kmeans(X,num_centers) runs K-means clustering % where inital centers are randomly selected from the % input vectors X. The output are found centers stored in % structure model.% % [model,y] = kmeans(X,num_centers,Init_centers) uses% init_centers as the starting point.%% Input:% X [dim x num_data] Input vectors.% num_centers [1x1] Number of centers.% Init_centers [1x1] Starting point of the algorithm.% % Output:% model [struct] Found clustering:% .X [dim x num_centers] Found centers.%% .y [1 x num_centers] Implicitly added labels 1..num_centers.% .t [1x1] Number of iterations.% .MsErr [1xt] Mean-Square error at each iteration.%% y [1 x num_data] Labels assigned to data according to % the nearest center.%% Example:% data = load('riply_trn');% [model,data.y] = kmeans( data.X, 4 );% figure; ppatterns(data); % ppatterns(model,12); pboundary( model );%% See also % EMGMM, KNNCLASS.%% (c) Statistical Pattern Recognition Toolbox, (C) 1999-2003,% Written by Vojtech Franc and Vaclav Hlavac,% <a href="http://www.cvut.cz">Czech Technical University Prague</a>,% <a href="http://www.feld.cvut.cz">Faculty of Electrical engineering</a>,% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>% Modifications:% 12-may-2004, VF[dim,num_data] = size(X);% random inicialization of class centers%-----------------------------------------------if nargin < 3, inx=randperm(num_data); model.X = X(:,inx(1:num_centers)); model.y = 1:num_centers; model.K = 1;endmodel.fun = 'knnclass';old_y = zeros(1,num_data);t = 0;% main loop%-------------------------while 1, t = t+1; % classificitation y = knnclass( X, model ); % computation of class centers err = 0; for i=1:num_centers, inx = find(y == i); if ~isempty(inx), % compute approximation error err = err + sum(sum((X(:,inx) - model.X(:,i)*ones(1,length(inx)) ).^2)); % compute new centers model.X(:,i) = sum(X(:,inx),2)/length(inx); end end % Number of iterations and Mean-Square Error model.t = t; model.MsErr(t) = err/num_data; if sum( abs(y - old_y) ) == 0, return; end old_y = y;endreturn;% EOF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -