Python Machine Learning

Silhouette Coefficient

Data Sample

X1X2Cluster
2100
252
841
580
751
641
122
490
X = [
    [2, 10],
    [2, 5],
    [8, 4],
    [5, 8],
    [7, 5],
    [6, 4],
    [1, 2],
    [4, 9]
]

Distances

01234567
0058.4852813743.6055512757.0710678127.2111025518.0622577482.236067977
1506.082762534.24264068754.1231056263.162277664.472135955
28.4852813746.08276253051.41421356227.2801098896.403124237
33.6055512754.242640687503.6055512754.1231056267.2111025511.414213562
47.07106781251.4142135623.60555127501.4142135626.7082039325
57.2111025514.12310562624.1231056261.41421356205.3851648075.385164807
68.0622577483.162277667.2801098897.2111025516.7082039325.38516480707.615773106
72.2360679774.4721359556.4031242371.41421356255.3851648077.6157731060
from sklearn.metrics.pairwise import euclidean_distances
dist = euclidean_distances(X)

Khoảng cách trung bình trong cùng 1 cluster

$$a_i = \frac{1}{1-|C_I|}\sum_{j\in C_I,i!=j}{d(i,j)}$$

d(i,j) là khoảng cách từ các điểm j đến điểm i trong cùng cluster

|CI| là số điểm trong cùng cluster CI

Khoảng cách trung bình cụm gần nhất

$$b(i) = min_{J != I}\frac{1}{|C_J|}\sum_{j \in C_J}{d(i,j)}$$

Silhouette score

$$s(i)=1-\frac{a(i)}{b(i)}$$

from sklearn.metrics import silhouette_samples
silhouette_samples(X, labels)

Silhouette Coefficient

$$SC = \frac{1}{N}\sum_{i=1}^{n}{s(i)}$$

from sklearn.metrics import silhouette_score
silhouette_score(X, labels)

Reference

Youtubehttps://www.youtube.com/watch?v=FGXkbawTHRQ
Wikihttps://en.wikipedia.org/wiki/Silhouette_(clustering)
Euclidean Distancehttps://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.euclidean_distances.html
silhouette sampleshttps://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_samples.html
silhouette scorehttps://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html