[Home]


kPPC

A Matlab code for k-Proximal Plane Clustering. [Code]


Reference

Yuan-Hai Shao,Yan-Ru Guo, Zhen Wang, Zhi-Min Yang, and Nai-Yang Deng. k-Proximal Plane Clustering,2013,Submitted.


Main Function

Need stdata;kernelfun;Initialization11;GepOneSide;Getchushi8;GepCluster8 function.

pY =kPPC(X,rX,k,knn,W,FunPara); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % kPPC: k-Proximal Plane Clustering % % pY =kPPC(X,rX,k,knn,W,FunPara); % % Input: X - data points matrix. Each row vector of fea is a data point % rX- the data points who is used to construct the initial plane % k- number of cluster; % knn- number of nearest neighbors; % W- the construct the initial plane; % FunPara - Struct value in Matlab. The fields in options that can be set: % c: [0,inf] appropriate parameter to tune the weight. % kerfPara: Kernel parameters. See kernelfun.m. % % % Examples: % X = rand(50,10);Y=[ones(20,1); ones(20,1)+1; ones(10,1)+2]; % c=0.01;k=3; kerfPara.type = 'lin'; % pY =kPPC(X,rX,k,knn,W,FunPara); % % Reference: % Yuan-Hai Shao,Yan-Ru Guo and Zhen Wang. k-Proximal Plane Clustering,2013,Submitted. % % Version 1.0 --Dec/2013 % % Written by Yan-Ru Guo ("Guoyanru211@163.com") %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initailization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %tic; m=size(X,1);Y1=zeros(m,1);book=sparse(m,m);cnt=sparse(m,m);d=1; knn=3; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Each data point is normalized with the mean 0 and standard deviation 1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% stX=stdata(X); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % initialize the input stX to get the cluster Y1 and rX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [Y1,rX]=Initialization11(stX,k,knn); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Construct the initial plane W %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% W=Getchushi8(rX,k,c); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Update plane W: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [s,t]=size(stX); pY=crossvalind('kfold',s,k);pYnew=zeros(s,1);z=0; while(~isempty(find(pY~=pYnew, 1)) && z~=1000) pYnew=pY; z=z+1; % update plane W for i=1:k tA=stX((pY==i),:); tB=stX((pY~=i),:); mi=size(tA,1); if ~isempty(find(pY==i, 1)) W(i,:)=GepOneSide(tA,tB,c); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Predict and output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if strcmp(kerfPara.type,'lin') pY=abs(stX*W(:,1:t)'+ones(s,1)*W(:,t+1)'); else pY=abs(stX*W(:,1:s)'+ones(s,1)*W(:,s+1)'); end [tmp,pY]=min(pY'); pY=pY'; end
Contacts


Any question or advice please email to shaoyuanhai21@163.com and Guoyanru211@163.com.