K-Medoids
Euclidean Distance
\[
d(X_i,M_j)=
\sqrt{\sum_{k=1}^{p}(x_{ik}-m_{jk})^2}
\]
Assignment
\[
C_i=\arg\min_{M_j\in M} d(X_i,M_j)
\]
Total Cost
\[
J(M)=
\sum_{i=1}^{n}
\min_{M_j\in M} d(X_i,M_j)
\]
Objective function
\[
\min_M J(M)
\]
Swap
\[
\Delta J=J_{\text{new}}-J_{\text{old}}
\]
\[
\Delta J<0
\Rightarrow
\text{Accept swap}
\]
\[
\Delta J\geq0
\Rightarrow
\text{Reject swap}
\]
Example
Code
Install Extra Sklearn
pip install scikit-learn-extra
Build model
from sklearn_extra.cluster import KMedoids
X = [
[1, 1],
[2, 2],
[2, 1],
[6, 5],
[7, 5],
[8, 6],
]
km = KMedoids(n_clusters=2)
km.fit(X)
print(km.labels_)
print(km.cluster_centers_)