📄 clusmse.m
字号:
% ---------------------------------------------------------------- % FUNCTION clusmse.m CLUSterin algorithm, MSE metric.% ---------------------------------------------------------------- % builds a block training set. % Usage: % cluster_centers = clusmse(orig_cluster_centers, training set, precision);% % orig_cluster: matrix, each ROW is a cluster center.% training set: matrix, each ROW is a sample.% Precision = stopping criterion: If the difference between two following% mse's is less than epsilon, then stop.%% __________________________% Author: Vittorio Castelli% Copyright IBM T. J. Watson Research Center% January 30, 1995; Last modified: January 30, 1995function clCen = clusmse(origCen, trSet,prec);learning_rate = .07;n_dist = 32;maxcount = 128;count = 0;contatore = 0;dis = 1;[m,n] = size(trSet);[n_cent,n1] = size(origCen);if n ~= n1, errormes(4); returnendaaa = ones(1,n);aa = ones(1,m);clCen = origCen;figure(1);clg;figure(2);clg;figure(3);clg;asdfg = max(size(trSet));plot3(trSet(1:20:asdfg,1),trSet(1:20:asdfg,2),trSet(1:20:asdfg,3),'.');grid;hold;oldplCen = clCen;plot3(clCen(:,1),clCen(:,2),clCen(:,3),'mx');while dis > prec, oldCen=clCen; contatore = contatore +1; for ii = 1:n_cent, distan(ii,:) = sum((trSet'-((clCen(ii,:))'*aa)).^2); end; [distan,ord] = sort(distan); ord = ord'; ord = ord(:,1); dis=0; for i=1:n_cent, nelcloud(i) = sum(ord==i); if nelcloud(i) ==0, fprintf(' %g',i) else aver = sum((((ord==i)*aaa).*trSet))/nelcloud(i); clCen(i,:) = clCen(i,:).*(1-learning_rate)+aver.*learning_rate; disper(i) = sum((ord == i).* ... (sum(((clCen(i,:)'*aa)-trSet').^2))')/nelcloud(i); end d_i = sum((clCen(i,:)-oldCen(i,:)).^2); dis=max(dis, d_i); disi(i) = d_i; end figure(1); subplot(211) plot(sqrt(disper),'+'); title('Dispersion'); subplot(212) plot(disi) titlestr = sprintf('Changes, iter. %g',contatore); title(titlestr); count = count+1; distance(count) = dis; if rem(count,n_dist)==0, figure(2); plot(distance,'.'); grid figure(3) plot3(oldplCen(:,1),oldplCen(:,2),oldplCen(:,3),'cx'); plot3(clCen(:,1),clCen(:,2),clCen(:,3),'mx'); oldplCen = clCen; end if count==maxcount, distance(1:count-n_dist+1) = distance(n_dist:count); count = count-n_dist+1, endendfprintf('\n');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -