⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k_mean.m

📁 The neuro-fuzzy software for identification and data analysis has been implemented in the MATLAB lan
💻 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 + -