在评价聚类效果中,分为内部指标和外部指标两类。当没有真实聚类标签时,通常采用内部指标进行评价,采用的内部指标主要有轮廓系数、方差比、DB指数三类。本文直接利用距离矩阵对轮廓系数和DB指数进行计算。可直接用于无法获得原始数据或例如时间序列聚类序列长度不一等情况下进行评价。
注意:聚类中心选取:下文采用距离所有类内样本最近的样本作为聚类中心,sklearn等官方采用类内平均值作为聚类中心
轮廓指数
计算流程:
- 计算样本i到组内其他样本平均距离a(i),
- 通过样本i到簇中心点距离得到距离样本i最近距离的簇,计算该点到最近簇中所有样本平均距离b(i)
- 计算样本轮廓系数 s(i) = (b(i)-a(i))/max(b(i), a(i))
- 计算总轮廓系数 s = 1/n*sum(s(i))
def silhouette_score_by_maxtrix(dis_matrix, label):
s_sum = 0
for i in range(len(dis_matrix)):
a_index = (label == label[i])
a_i = dis_matrix[i][a_index].mean()
#得到类中心点索引
b_i = float('inf')
label_j = -1
for j in set(label):
if j == label[i]:
continue
b_index = (label == j)
b_j = dis_matrix[b_index,:][