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

📄 clustermatlab.txt

📁 可方便地实现聚类分析,MATLAB版的,多多珍惜啊
💻 TXT
字号:
cArrSize=6;

cArr=zeros(cArrSize,cArrSize);
copyCArr=zeros(cArrSize,cArrSize);
cBoolArr=zeros(cArrSize,cArrSize);

dataArrRow=6;
dataArrCol=4;
dataArr=zeros(dataArrRow,dataArrCol);
%--filling data in data arr--%
dataArr=[0.9434 0.0476 0.0625 0.2083;
	0.2994 0.2236 0.5 1;
	0.8065 0.0555 0.0833 0.25;
	0.2463 0.0685 0.1429 0.5;
	0.1355 0.0435 0.0714 1;
	0.1056 0.0379 0.0208 0.8333];

%--cal dis between arr(i,j)--%
%-----using cos method-----%
for i=1:dataArrRow
	for j=i+1:dataArrRow
		tmpDotSum=0;
		tmpLen=0;tmpLen1=0;tmpLen2=0;
		for m=1:dataArrCol
			tmpDotSum=tmpDotSum+dataArr(i,m)*dataArr(j,m);
			tmpLen1=tmpLen1+dataArr(i,m)^2;
            tmpLen2=tmpLen2+dataArr(j,m)^2;
		end
		tmpLen=sqrt(tmpLen1)*sqrt(tmpLen2);		
		cArr(i,j)=tmpDotSum/tmpLen;		
	end   
end

%--make the full c arr --%
for i=1:dataArrRow
    for j=1:i-1
        cArr(i,j)=cArr(j,i);
    end
    cArr(i,i)=1;
end

%--washall enclosure algorithm--%
unchanged=0;
while unchanged==0
    unchanged=1;	
    %--sigma:i=1:n(combine(conj(cArr(i,k),cArr(k,j))))
	for i=1:cArrSize
		for j=1:cArrSize
            mergeVal=0;
			for k=1:cArrSize
			    if(cArr(i,k)<=cArr(k,j)&&cArr(i,k)>mergeVal)		
						mergeVal=cArr(i,k);
					else if(cArr(i,k)>cArr(k,j)&&cArr(k,j)>mergeVal)
						mergeVal=cArr(k,j);
                     end 
					end
			end
			if(mergeVal>cArr(i,j))
				copyCArr(i,j)=mergeVal;
				unchanged=0;
			else
				copyCArr(i,j)=cArr(i,j);
			end
		end
	end
    %--copy back--%
    for i=1:cArrSize
        for j=1:cArrSize
            cArr(i,j)=copyCArr(i,j); 
        end
    end
end	

%--cluster--%
limitLine=1;
limitStep=0.1;
expectedLimit=0.6;

comArr=zeros(1,cArrSize);
groupIndentifyArr=zeros(1,cArrSize);
groupDelegateArr=zeros(1,cArrSize);
groupNum=1;


while(limitLine>=expectedLimit)
		for i=1:cArrSize
			for j=1:cArrSize
				if(cArr(i,j)<limitLine)
					cBoolArr(i,j)=0;
				else
					cBoolArr(i,j)=1;
				end			
			end
		end

		%--make the comparation arr--%
		for j=1:cArrSize
			tempVal=0;
			for i=1:cArrSize
				tempVal=tempVal+cBoolArr(i,j)*2^(i-1);
			end
			comArr(j)=tempVal;
		end	
		
		%--core part: pation the equivalence class--%
		
		%--initialize part--%
		groupIndentifyArr(1)=1;
		groupDelegateArr(1)=1;
		groupNum=1;
		
		%--main part of the algorithm--%
		
        for i=2:cArrSize
		flag=0;
			for count=1:groupNum
				if(comArr(groupDelegateArr(count))==comArr(i))
						groupIndentifyArr(i)=count;	
						flag=1;
                        break;
				end
			end
			   %--attention ,in matlab ,the exit val for count in for iteration is groupNum--%
			if(flag==0) %--here can't use count==groupNum+1 as a judgement
				groupNum=groupNum+1;
				groupDelegateArr(groupNum)=i;
				groupIndentifyArr(i)=groupNum;
			end
		end
		
		limitLine=limitLine-limitStep;
end   

groupIndentifyArr

⌨️ 快捷键说明

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