我的小程序:
聚类的性能度量大致有两类:“外部指标”和“内部指标”。
外部指标:是指把算法得到的划分结果跟某个外部的“参考模型”(如专家给出的划分结果)比较。
定义:
有如下常用的聚类性能度量的外部指标:
Jaccard系数(JC):
FM指数(FMI):
Rand指数(RI):
容易看出,这些指标的值都在[0,1]之间,且越大越好。
内部指标:是指直接考察聚类结果,不利用任何参考模型的指标。
定义:
有如下常用的聚类性能度量的内部指标:
DB指数(DBI):
Dunn指数(DI):
DBI指标python代码实现:
#簇内样本间平均距离
mean_dist = [0,0,0];
for i in range(k):
for j in range(len(result[i])):
for l in range(j+1,len(result[i])):
mean_dist[i] += np.sqrt(sum((x[result[i][j]] - x[result[i][l]])**2))
mean_dist[i] = mean_dist[i] * 2 / (len(result[i]) * (len(result[i]) - 1))
#print(mean_dist)
DBI = 0;
for i in range(k):
the_max = 0;
for j in range(k):
if i != j:
center_dist = np.sqrt(sum((mean_point[i] - mean_point[j])**2))
tmp_max = (mean_dist[i] + mean_dist[j]) / center_dist
if tmp_max > the_max:
the_max = tmp_max
DBI += the_max
DBI /= k
参考资料:周志华《机器学习》