Évaluation de la qualité du clustering: propriétés, mesures, code GitHub

Le clustering est une chose tellement magique: il transforme une grande quantité de données non structurées en un ensemble potentiellement visible de clusters, dont l'analyse nous permet de tirer des conclusions sur le contenu de ces données.


Il existe de nombreuses applications pour les méthodes de clustering. Par exemple, nous regroupons les requêtes de recherche afin d'augmenter la capacité de généralisation des algorithmes de classement: toutes les statistiques calculées à partir d'un groupe de requêtes similaires sont plus fiables que les mêmes statistiques calculées pour une requête distincte. Le clustering vous permet d'améliorer la qualité des requêtes avec des formulations rarement rencontrées. Un autre exemple clair est Yandex.News, qui génère automatiquement des reportages.


En 2013, j'ai eu la chance de participer au développement d'un algorithme de clustering très complexe. Il fallait regrouper des centaines de milliers d'objets de très haute qualité et le faire rapidement: en quelques dizaines de secondes sur une même machine. La première étape a été de construire un système d'évaluation de la qualité, et dans cet article, j'en parlerai.




, , , .


, : , , , /- . , . — .


1.


, . .



, . Amigo et. al, 2009. A comparison of Extrinsic Clustering Evaluation Metrics based on Formal Constraints , , .


1.1. Cluster Homogeneity,



.


1.2. Cluster Completeness,



, . .


1.3. Rag Bag



: , , («»), . , , , .


, . , . «» : , .


1.4. Size vs Quantity



.


2.


.


D = { d 1 , . . . , d N }. . , E 2 D — ,


e 1 , e 2E : ( e 1e 2) ( e 1 = e 2 )


: . , .


, : T = { t 1 , . . . , t n } C={c1,...,cm}. t(d) c(d) , , , d.


2.1. , ()


. , . , .


. 3 («»), 3 («») 2 («»). : «» , «» «».



88=64 , :
33+33+22=22 ;
6422=42 .


«» «» , - «» .


, :
TP=18 ;
FP=6 , ;
TN=36 ;
FN=4 , .


, :


P=TP/(TP+FP)=0.75


R=TP/(TP+FN)=0.82


F1=2PRP+R=0.78


, : .


. , : .


pairwise- — . - pairwise- .


2.2. ,


:


P(c,t)=|ct||c|


R(c,t)=|ct||t|


: «» (y) «» (v). 25 10 . 25/35, — 10/35. . , 30 12 , 25/30, — 10/12.



: , . :


P ( c , t ) = R ( t , c )


F-:


F 1 ( c , t ) = 2 P ( c , t ) R ( c , t )P ( c , t ) + R ( c , t )


. «» , Purity:


Purity=mi=1|ci|mmax1jnP(ci,tj)


, :


IversePurity=nj=1|tj|nmax1imP(ci,tj)


Purity , . IversePurity — . , ? , . :


|c2||t2||t1||c1|



|c2|=1000, |c1|=2, |t1|=20, |t2|=982. c1 t1, :


|c1t1|=2,|c1t2|=0,


|c2t1|=18,|c2t2|=982


:


P(c1,t1)=|c1t1|/|c1|=2/2=1


P(c2,t2)=|c2t2|/|c2|=982/1000=0.982


P(t1,c2)=|t1c2|/|t1|=18/20=0.9


P(t2,c2)=|c2t2|/|t2|=982/982=1


, Purity InversePurity . :


Purity=0.9982


IversePurity=0.9823


, t1 . , . . Purity t1 c1, InversePurity — c2. !


F-:


F=nj=1|tj|nmax1imF(ci,tj)


, , . , , , .


2.3. BCubed-


. , . , , ? ?



, BCubed- . :


BCP(d)=|c(d)t(d)||c(d)|


BCR(d)=|c(d)t(d)||t(d)|


:


BCP=1NdDBCP(d)


BCR=1NdDBCR(d)


BCubed Precision Cluster Homogeneity Rag Bag, BCubed Recall — Cluster Completeness Size vs Quantity. — F- — :


BCF=2BCPBCRBCP+BCR


3.


, . , .


, , . D={a,b,c,d,e,f,g,h,i} , t1={a,b,c,d,e} t2={f,g,h,i} («» «» ).


: c1={a,b,c,d,g}, c2={e,f,h,i}.



3.1. BCubed


BCubed- :


BCP(ti)=1|ti|dtiBCP(d)


BCR(ti)=1|ti|dtiBCR(d)


:


BCP(a)=BCP(b)=BCP(c)=BCP(d)=|t1c1||c1|=0.8,BCP(e)=|t1c2||c2|=0.25


BCP(f)=BCP(h)=BCP(i)=|t2c2||c2|=0.75,BCP(g)=|t2c1||c1|=0.2


:


BCP(t1)=BCP(a)+BCP(b)+BCP(c)+BCP(d)+BCP(e)5=40.8+0.255=0.69


BCP(t2)=BCP(f)+BCP(g)+BCP(h)+BCP(i)4=30.75+0.24=0.6125


:


BCR(a)=BCR(b)=BCR(c)=BCR(d)=|t1c1||t1|=0.8,BCR(e)=|t1c2||t1|=0.2


BCR(f)=BCR(h)=BCR(i)=|t2c2||t2|=0.75,BCP(g)=|t2c1||t2|=0.25


BCR(t1)=BCR(a)+BCR(b)+BCR(c)+BCR(d)+BCR(e)5=40.8+0.25=0.68


BCR(t2)=BCR(f)+BCR(g)+BCR(h)+BCR(i)4=30.75+0.254=0.625


BCP BCR :


BCP=BCP(t1)+BCP(t2)2=0.65125


BCR=BCR(t1)+BCR(t2)2=0.6525


.


3.2. Expected Cluster Completeness


. , , , , - .


— F- — . , ? .


, , «». . — . : , , .


— :


f:CT


f (cluster completeness):


CCf(t)=maxcf1(t)|ct||t|


:


CCf(T)=1TtTCCf(t)


— , f. : .


. , f(c)=t,


P(f(c)=t)=P(c,t)=|ct||c|


f :


P(f)=cC|cf(c)||c|


:


ECC(t)=f:CTP(f)CCf(t)


:


ECC=1|T|tTECC(t)


:


ECC=f:CTP(f)CCf(T)


. t c1, c2, ..., ck, :


|tc1||tc2|...|tck|


c1 t


P(f(c1)=t)=|c1t||c1|



R(c1,t)=|c1t||t|


, , . R(c1,t).


c1 , p(c2,t) t c2. R(c2,t). , ,


P(c1,t)R(c1,t)+P(c2,t)R(c2,t)(1P(c1,t))+...


ECC . sortedMatchings , , . Precision() Recall() . :


double ExpectedClusterCompleteness(const TMatchings& sortedMatchings) {
    double expectedClusterCompleteness = 0.;
    double probability = 1.;
    for (const TMatching& matching : sortedMatchings) {
        expectedClusterCompleteness += matching.Recall() * matching.Precision() * probability;
        probability *= 1. - matching.Precision();
    }
    return expectedClusterCompleteness;
}

, F1-, !


ECC , 3. t1 c1, t2c2. :


ECC(t1)=R(c1,t2)P(c1,t1)+R(c2,t1)P(c2,t1)(1P(c1,t1))
ECC(t1)=0.82+0.20.25(10.8)=0.65


ECC(t2)=R(c2,t2)P(c2,t2)+R(c1,t2)P(c1,t2)(1P(c2,t2))
ECC(t2)=0.752+0.250.2(10.75)=0.575


, :


ECC=ECC(t1)+ECC(t2)2=0.6125


4.


, 3, C++ MIT GitHub. Linux, Windows.


:


git clone https://github.com/yandex/cluster_metrics/ .
cmake .
cmake --build .

, 3. !


./cluster_metrics samples/sample_markup.tsv samples/sample_clusters.tsv
ECC   0.61250 (0.61250)
BCP   0.65125 (0.65125)
BCR   0.65250 (0.65250)
BCF1  0.65187 (0.65187)

«» , , . , , . , , . — .


5. ,


, , , .


. , , . , , :



: , . , , . , , , — . — ECC!


, , — . .


, , , . .


, , , ECC! ECC - , , , 100% . .


, 1 . : — .



Cluster Completeness


, , . , Cluster Homogeneity, Cluster Completeness, Rag Bag , Size vs Quantity .


, : , , , .


, 3, , .


, , : . , , .


All Articles