Clustering adalah hal yang sangat ajaib: mengubah sejumlah besar data yang tidak terstruktur menjadi kumpulan cluster yang berpotensi terlihat, analisis yang memungkinkan kita untuk menarik kesimpulan tentang konten data ini.
Ada banyak aplikasi untuk metode pengelompokan. Misalnya, kami mengelompokkan kueri penelusuran untuk meningkatkan kemampuan generalisasi algoritme peringkat: statistik apa pun yang dihitung dari grup kueri serupa lebih dapat diandalkan daripada statistik yang sama yang dihitung untuk satu kueri terpisah. Clustering memungkinkan Anda untuk meningkatkan kualitas kueri dengan formulasi yang jarang ditemui. Contoh jelas lainnya adalah Yandex.News, yang secara otomatis menghasilkan berita.
Kembali pada tahun 2013, saya beruntung dapat berpartisipasi dalam pengembangan algoritma pengelompokan yang sangat kompleks. Itu perlu untuk mengelompokkan ratusan ribu objek dengan kualitas sangat tinggi dan melakukannya dengan cepat: dalam puluhan detik pada satu mesin. Langkah pertama adalah membangun sistem penilaian kualitas, dan dalam artikel ini saya akan membicarakannya.

, , , .
, : , , , /- . , . β .
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={d1,...,dN}. . , Eβ2D β ,
βe1,e2βE:(e1β©e2β β
)β(e1=e2)
: . , .
, : T={t1,...,tn} C={c1,...,cm}. t(d) c(d) , , , d.
2.1. , ()
. , . , .
. 3 («»), 3 («») 2 («»). : «» , «» «».

8β
8=64 , :
β 3β
3+3β
3+2β
2=22 ;
β 64β22=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)=|cβ©t||c|
R(c,t)=|cβ©t||t|
: «» (y) «» (v). 25 10 . 25/35, β 10/35. . , 30 12 , 25/30, β 10/12.

: , . :
P(c,t)=R(t,c)
F-:
F1(c,t)=2β
P(c,t)β
R(c,t)P(c,t)+R(c,t)
. «» , Purity:
Pkamursayaty=mβsaya=1|csaya|mmaks1β€jβ€nP(csaya,tj)
, :
sayaversePkamursayaty=nβj=1|tj|nmaks1β€sayaβ€mP(csaya,tj)
Pkamursayaty , . sayaversePkamursayaty β . , ? , . :
|c2|β|t2|β«|t1|β«|c1|

|c2|=1000, |c1|=2, |t1|=dua puluh, |t2|=982. c1 t1, :
|c1β©t1|=2,|c1β©t2|=0,
|c2β©t1|=delapan belas,|c2β©t2|=982
:
P(c1,t1)=|c1β©t1|/|c1|=2/2=1
P(c2,t2)=|c2β©t2|/|c2|=982/1000=0,982
P(t1,c2)=|t1β©c2|/|t1|=delapan belas/dua puluh=0,9
P(t2,c2)=|c2β©t2|/|t2|=982/982=1
, Purity InversePurity . :
Pkamursayaty=0,9982
sayaversePkamursayaty=0,9823
, t1 . , . . Purity t1 c1, InversePurity β c2. !
F-:
F=nβj=1|tj|nmaks1β€sayaβ€mF(csaya,tj)
, , . , , , .
2.3. BCubed-
. , . , , ? ?

, BCubed- . :
BCP(d)=|c(d)β©t(d)||c(d)|
BCR(d)=|c(d)β©t(d)||t(d)|
:
BCP=1NβdβDBCP(d)
BCR=1NβdβDBCR(d)
BCubed Precision Cluster Homogeneity Rag Bag, BCubed Recall β Cluster Completeness Size vs Quantity. β F- β :
BCF=2β
BCPβ
BCRBCP+BCR
3.
, . , .
, , . D={Sebuah,b,c,d,e,f,g,h,saya} , t1={Sebuah,b,c,d,e} t2={f,g,h,saya} («» «» ).
: c1={Sebuah,b,c,d,g}, c2={e,f,h,saya}.

3.1. BCubed
BCubed- :
BCP(tsaya)=1|tsaya|βdβtsayaBCP(d)
BCR(tsaya)=1|tsaya|βdβtsayaBCR(d)
:
BCP(Sebuah)=BCP(b)=BCP(c)=BCP(d)=|t1β©c1||c1|=0.8,BCP(e)=|t1β©c2||c2|=0,25
BCP(f)=BCP(h)=BCP(saya)=|t2β©c2||c2|=0,75,BCP(g)=|t2β©c1||c1|=0,2
:
BCP(t1)=BCP(Sebuah)+BCP(b)+BCP(c)+BCP(d)+BCP(e)5=4β
0.8+0,255=0,69
BCP(t2)=BCP(f)+BCP(g)+BCP(h)+BCP(saya)4=3β
0,75+0,24=0,6125
:
BCR(Sebuah)=BCR(b)=BCR(c)=BCR(d)=|t1β©c1||t1|=0.8,BCR(e)=|t1β©c2||t1|=0,2
BCR(f)=BCR(h)=BCR(saya)=|t2β©c2||t2|=0,75,BCP(g)=|t2β©c1||t2|=0,25
BCR(t1)=BCR(Sebuah)+BCR(b)+BCR(c)+BCR(d)+BCR(e)5=4β
0.8+0,25=0,68
BCR(t2)=BCR(f)+BCR(g)+BCR(h)+BCR(saya)4=3β
0,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:CβT
f (cluster completeness):
CCf(t)=makscβf-1(t)|cβ©t||t|
:
CCf(T)=1TβtβTCCf(t)
β , f. : .
. , f(c)=t,
P(f(c)=t)=P(c,t)=|cβ©t||c|
f :
P(f)=βcβC|cβ©f(c)||c|
:
ECC(t)=βf:CβTP(f)β
CCf(t)
:
ECC=1|T|βtβTECC(t)
:
ECC=βf:CβTP(f)β
CCf(T)
. t c1, c2, ..., ck, :
|tβ©c1|β₯|tβ©c2|β₯...β₯|tβ©ck|
c1 t
P(f(c1)=t)=|c1β©t||c1|
R(c1,t)=|c1β©t||t|
, , . R(c1,t).
c1 , hal(c2,t) t c2. R(c2,t). , ,
P(c1,t)β
R(c1,t)+P(c2,t)β
R(c2,t)β
(1-P(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, t2 β c2. :
ECC(t1)=R(c1,t2)β
P(c1,t1)+R(c2,t1)β
P(c2,t1)β
(1-P(c1,t1))
ECC(t1)=0.82+0,2β
0,25β
(1-0.8)=0,65
ECC(t2)=R(c2,t2)β
P(c2,t2)+R(c1,t2)β
P(c1,t2)β
(1-P(c2,t2))
ECC(t2)=0,752+0,25β
0,2β
(1-0,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, , .
, , : . , , .