Code covered by the BSD License  

Highlights from
(simple) Tool for estimating the number of clusters

from (simple) Tool for estimating the number of clusters by Kaijun Wang
12 validity indices, illustrate estimation of the number of clusters

valid_internal_deviation(data,labels,dtype)
function [DB,CH,KL,Han,st] = valid_internal_deviation(data,labels,dtype)
% cluster validity indices based on deviation

[nrow,nc] = size(data);
labels = double(labels);
k=max(labels);
if dtype == 1
   [st,sw,sb,cintra,cinter] = valid_sumsqures(data,labels,k);
else
   [st,sw,sb,cintra,cinter] = valid_sumpearson(data,labels,k);
end
ssw = trace(sw);
ssb = trace(sb);

if k > 1
% Davies-Bouldin
  R = zeros(k);
  dbs=zeros(1,k);
  for i = 1:k
    for j = i+1:k
      if cinter(i,j) == 0 
         R(i,j) = 0;
      else
         R(i,j) = (cintra(i) + cintra(j))/cinter(i,j);
      end
    end
    dbs(i) = max(R(i,:));
  end
  DB = mean(dbs(1:k-1));
  
  CH = ssb/(k-1); 
else
  CH =ssb; 
  DB = NaN;
  Dunn = NaN; 
end

CH = (nrow-k)*CH/ssw;    % Calinski-Harabasz
Han = ssw;                        % component of Hartigan
KL = (k^(2/nc))*ssw;         % component of Krzanowski-Lai

Contact us at files@mathworks.com