davies_bouldin_score用于评估聚类模型

在之前写的一篇关于聚类分析的文章中,介绍了两种用于评价聚类模型好坏的标准,分别是elbow method和silhouette score。现在使用另外一种评分方式。

davies_bouldin_score, sklearn中有这个包, 但介绍不是很多。大概意思就是这个分数越低,模型越好,最小值是0。

直接用代码可视化分析一下:
首先还是生成数据:

from sklearn.datasets import make_moons
X, y = make_moons(200, noise=.05, random_state=0)
plt.scatter(X[:, 0], X[:, 1],s=50)
plt.show()

依旧是月牙图形
davies_bouldin_score用于评估聚类模型_第1张图片
然后先解释一下这个davies_bouldins_score的参数,需要传入数据X,和对应已经训练好的labels,即每个数据点的分类,它就会返回一个分数。

这里测试了三种不同的距离方式 :

euclidean欧式距离,

manhattan曼哈顿距离,

cosine余弦距离,

同时还要比较不同的k以及不同的linkage方式,分别有

single,average,complete。

这里不是很懂的可以去看本文开始链接中的文章。

代码如下

from sklearn.cluster import AgglomerativeClustering as AC
from sklearn.metrics import davies_bouldin_score as dbs
def hierarchical(X, similarity):
    scores1=[]
    for k in range(2,10):
        labels =AC(n_clusters=k,affinity=similarity,linkage="complete").fit_predict(X)
        scores1.append(dbs(X, labels))
    plt.plot(range(2,10), scores1,c='red',label='complete')
    
    scores2=[]
    for k in range(2,10):
        labels =AC(n_clusters=k,affinity=similarity,linkage="single").fit_predict(X)
        scores2.append(dbs(X, labels))
    plt.plot(range(2,10), scores2,c='blue',label="single")
    
    scores3=[]
    for k in range(2,10):
        labels =AC(n_clusters=k,affinity=similarity,linkage="average").fit_predict(X)
        scores3.append(dbs(X, labels))
    plt.plot(range(2,10), scores3,c='green',label="average")
    plt.ylabel("davies_bouldin_score")
    plt.xlabel("$k/n clusters$")
    plt.title(similarity)
    plt.legend(loc=0)
    plt.show()   
    
hierarchical(X,"euclidean")
hierarchical(X, "cosine")
hierarchical(X,"manhattan")

图像如下:
davies_bouldin_score用于评估聚类模型_第2张图片
davies_bouldin_score用于评估聚类模型_第3张图片可以发现average在大部分情况下都表现得很好,因为他的值很低。虽然在cosine中single表现得好一些,但由于hierarchial clustering默认的k是2,在k/n_clusters=2的情况下,average都是最好的,所以最终还是选择average。

并且在average,k=2的情况下,模型最好。

你可能感兴趣的:(统计学/数据处理/机器学习,聚类,可视化,python,机器学习)