📄 k_mean.m
字号:
function [centers,bases]=k_mean(comp,training_set)%K_MEAN% [centers,bases]=k_mean(comp,training_set)%% centers[no_rules,no_var] centers of the membership functions% bases[no_rules,no_var] bases of the membership functions %% comp complexity (number of fuzzy rules)% training_set the training set matrix% %___________________________________________________10 April 1996_______global memb_fun;eps=0.0;no_var=size(training_set,2)-1;centers=zeros(comp,no_var);ranges=zeros(no_var,2);for j=1:no_var ranges(j,1)=min(training_set(:,j))-eps; ranges(j,2)=max(training_set(:,j))+eps; centers(:,j)=ranges(j,1)+... rand(comp,1)*(ranges(j,2)-ranges(j,1));enddata=training_set(:,1:no_var); [no_data,no_variables]=size(data);change=1;data_norm=zeros(size(data));for j=1:no_var data_norm(:,j)=Normalized(data(:,j),ranges(j,1),ranges(j,2));endwhile (change >0.001) [no_clusters,no_var]=size(centers); no_data_cluster=zeros(no_clusters,1); change=0.0; no_new_centers=0; centers_norm=zeros(size(centers)); stdev=zeros(size(centers)); bas_max=zeros(size(centers)); minimum=zeros(size(centers)); maximum=zeros(size(centers)); for j=1:no_var centers_norm(:,j)=Normalized(centers(:,j),ranges(j,1),ranges(j,2)); end distances=dist(data_norm,centers_norm'); % distances [ no_data,no_clusters] if no_clusters>1 [a,cluster_related]=min (distances'); else cluster_related=ones(no_data,1); end for i=1:no_clusters no_data_cluster(i)=sum ( cluster_related == i); end data_clustered=zeros(size(data)); for i=1:no_clusters if no_data_cluster(i)>0 no_new_centers=no_new_centers+1; start_data=sum(no_data_cluster(1:i-1))+1; end_data=sum(no_data_cluster(1:i)); data_clustered(start_data:end_data,:)=data(cluster_related == i,:); if (no_data_cluster(i)>1) new_center=mean(data_clustered(start_data:end_data,:)); minimum(no_new_centers,:)=min(data_clustered(start_data:end_data,:)); maximum(no_new_centers,:)=max(data_clustered(start_data:end_data,:)); stdev(no_new_centers,:)=std(data_clustered(start_data:end_data,:)); bas_max(no_new_centers,:)=max(abs(new_center-minimum(no_new_centers,:)),abs(maximum(no_new_centers,:)-new_center)); else new_center=data_clustered(start_data:end_data,:); stdev(no_new_centers,:)=(ranges(:,2)-ranges(:,1))'/20; bas_max(no_new_centers,:)=(ranges(:,2)-ranges(:,1))'/10; end centers(no_new_centers,:)=new_center; change=change+dist(new_center,centers(i,:)'); end end centers=centers(1:no_new_centers,:); stdev=stdev(1:no_new_centers,:); bas_max=bas_max(1:no_new_centers,:); no_data_cluster=no_data_cluster(1:no_new_centers);endif strcmp(memb_fun,'gaussian') bases=stdev.^2;endif strcmp(memb_fun,'triangular') bases=2*bas_max;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -