close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 12 years ago

Last modified 12 years ago

#1639 assigned defect

Algoritmos de evaluación de clustering

Reported by: lmperez@… Owned by: Jorge
Priority: normal Milestone: Mantainance
Component: Kernel Version: 3.1
Severity: normal Keywords:
Cc:

Description

Hola TOL, he estado buscando algoritmos de evaluación de cómo de bueno es un clustering, y no he encontrado ninguno.

Ayer creé una variante simplificada del índice de Dunn (la que mide distancias entre centroides y diámetro como el doble del radio medio):

Real Dunn.Index(Set sCluster)
{// Set sCluster = Cluster.Res;
  // Primero buscamos el máximo de los diámetros de un mismo cluster.
  // Aproximamos por una variante del índice de Dunn, que mide el diámetro
  // de cada cluster como el doble del radio medio:

  Set sDeltas.Den = For(1,Card(sCluster["SetOfClusters"]),Real (Real j)
  {// Real j = 1;
    Set    Xl = sCluster["SetOfClusters"][j];
    Real   Nl = Card(Xl);
    Matrix Cl = SubRow(sCluster["Centroids"],[[ j ]]);
    Matrix Ul = BinGroup("<<",For(1,Nl,Matrix (Real k){ Cl }));
    Matrix Xk = BinGroup("<<",Xl);

    Matrix restas     = (Xk - Ul);
    Matrix unos       = Rand(Columns(Cl),1,1,1);
    Matrix distancias = ((restas $* restas) * unos)^0.5;

    Real DeltaL = 2*MatSum(distancias)/Nl;
    Real PutName("DeltaL_cluster"<<j,DeltaL)
  });

  // Segundo, buscamos la mínima de las distancias entre clusters distintos.
  // Este punto es tremendamente complejo, para simplificar usamos una variante
  // que consiste en medir únicamente la distancia entre centroides:

  Set sElements = Range(1,Rows(sCluster["Centroids"]),1);

  Matrix mDeltas.Num = BinGroup("<<",
    For(1,Rows(sCluster["Centroids"]),Matrix (Real j)
    {// Real j = 1;
      Matrix m1 = SubRow(sCluster["Centroids"],[[ j ]]);
      Matrix m2 = SubRow(sCluster["Centroids"],sElements - [[ j ]]);
      Matrix ml = BinGroup("<<",For(1,Card(sElements)-1,Matrix (Real k){ m1 }));
  
      Matrix restas2    = (m2 - ml);
      Matrix unos2      = Rand(Columns(ml),1,1,1);
      Matrix distancias2 = ((restas2 $* restas2) * unos2)^0.5;
      Matrix PutName("DistanciasCentroides_cluster"<<j,distancias2)
    })
  );

  // Indice de Dunn
  Real Dunn.Index = MatMin(mDeltas.Num)/SetMax(sDeltas.Den)
};

Os paso un documento adjunto de la Universidad de São Paulo donde explican algunos de ellos:
Dunn, Davies-Bouldin, PBM, etc

Un saludo

Change History (2)

Changed 12 years ago by lmperez@…

Attachment: Validacao_I.pdf added

comment:1 Changed 12 years ago by Víctor de Buen Remiro

Owner: changed from Víctor de Buen Remiro to Jorge
Status: newassigned
Note: See TracTickets for help on using tickets.