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

📄 hfc.m

📁 The neuro-fuzzy software for identification and data analysis has been implemented in the MATLAB lan
💻 M
字号:
function [centers,bases]=hfc(c,data)%HFC		Hyperplane Fuzzy Clustering%%  [centers,bases]=hfc(c,data)%%	centers[no_rules,no_var]   centers of the membership functions%	bases[no_rules,no_var]	   bases   of the membership functions   	%%	c			complexity (number of fuzzy rules)%	data			the training set matrix%	%___________________________________________________20 April 1996_______global memb_funalpha=.8;m=2;[N,p]=size(data);ranges=[min(data);max(data)];u=zeros(c,N);distance=zeros(c,N);D=zeros(c,N);gamma=zeros(c,N);%Random initialization of u with crisp valuesfor k=1:N	[maximum,pos]=max(rand(c,1));	u(pos,k)=1;endfirst=1;repeat=1;while (repeat)		for i=1:c				S=zeros(p,p);			%Scatter Matrix		hyperplane=zeros(p-1,p);											if sum(u(i,:).^m)			v(i,:)=(u(i,:).^m)*data./sum(u(i,:).^m);		else			for j=1:p				v(i,j)=ranges(1,j)+rand*(ranges(2,j)-ranges(1,j));			end			end						for k=1:N			S=S+(u(i,k).^m)*(data(k,:)-v(i,:))'*(data(k,:)-v(i,:));		end			[V,Lambda]=eig(S);		[lambda_min,pos_min]=min(diag(Lambda));		V(:,pos_min)=[];		hyperplane=V';						if (trace(Lambda)-lambda_min)			epsilon=1-lambda_min/((trace(Lambda)-lambda_min));		else			epsilon=0;		end		for k=1:N			distance(i,k)=norm(data(k,:)-v(i,:));			D(i,k)=distance(i,k)*sin(subspace((data(k,:)-v(i,:))',hyperplane'));			gamma(i,k)=distance(i,k).^2-epsilon*D(i,k).^2;		end	end		for i=1:c		for k=1:N			temp=0;			for j=1:c				if gamma(j,k)					temp=temp+gamma(i,k)/gamma(j,k);				end			end						if temp				u(i,k)=temp^(-1/(m-1));			else				u(i,k)=0;			end		end	end		J=sum(sum((u.^m).*(alpha*D.^2+(1-alpha)*distance.^2)));		if first		first=0;	else		if (J>J_old-0.3)			repeat=0;		end	end		J_old=J;endcenters=v(:,1:p-1);bases=zeros(size(centers));default_base=(ranges(2,1:p-1)-ranges(1,1:p-1))./20;if strcmp(memb_fun,'gaussian')	for i=1:c		related=(u(i,:)>0.05);		related_data=data(related,1:p-1);		if size(related_data,1)>1			bases(i,:)=(std(related_data)).^2;		else			bases(i,:)=default_base;		end	endendif strcmp(memb_fun,'triangular')	for i=1:c		related=(u(i,:)>0.05);		related_data=data(related,1:p-1);		no_related_data=size(related_data,1);				bas=abs(ones(no_related_data,1)*centers(i,:)-related_data);				if no_related_data>1			bases(i,:)=2*max(bas);		elseif no_related_data==1			bases(i,:)=2*bas;		else			bases(i,:)=default_base;		end	endend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -