sc.m 2.25 KB
Newer Older
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
% This function applies different variants of Spectral Clustering method.

% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
%                                     <jbleger@bordeaux.inra.fr>
% 
% This software is a computer program whose purpose is to simulated 
% ecological bipartite graphs, apply clustering methods on these graphs.
% 
% This software is governed by the CeCILL-B  license under French law and
% abiding by the rules of distribution of free software. You can use, 
% modify and/ or redistribute the software under the terms of the 
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
% 
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty  and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability. 
% 
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or 
% data to be ensured and, more generally, to use and operate it in the 
% same conditions as regards security. 
% 
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
% 


function assignment=sc(W,k,select,normalize)

  % 3 -> 1,1
  % 4 -> 2,0

  D=@(W)diag(sum(W,2));
  Lsym=@(W) eye(size(W))-D(W)^(-1/2)*W*D(W)^(-1/2);
  s = @(M) .5*(M+M');

  [P,V]=eig(s(Lsym(W)));
%  keyboard

  if(select==1)
    [vps,i]=sort(1-diag(V),"descend");
  elseif(select==2)
    [vps,i]=sort(abs(1-diag(V)),"descend");
  end

  if(k==0)
      k = sum(vps>.5);
  end
  

  %keyboard
  T=P(:,i(1:k));

  if(normalize)
    U=T./(sqrt(sumsq(T,2))*ones(1,k));
  else
    U=T;
  end


  assignment=kmeansA(U,k);

end