使用K-means進行聚類,用calinski_harabaz_score評價聚類效果


代碼如下:

"""
下面的方法是用kmeans方法進行聚類,用calinski_harabaz_score方法評價聚類效果的好壞
大概是類間距除以類內距,因此這個值越大越好

"""
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn import metrics
"""
下面是生成一些樣本數據
X為樣本特征,Y為樣本簇類別, 共1000個樣本,每個樣本2個特征,共4個簇,簇中心在[-1,-1], [0,0],[1,1], [2,2],
簇方差分別為[0.4, 0.5, 0.2]
"""
X, y = make_blobs(n_samples=500, n_features=2, centers=[[2,3], [3,0], [1,1]], cluster_std=[0.4, 0.5, 0.2],
                  random_state =9)
"""
首先畫出生成的樣本數據的分布
"""
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
"""
下面看不同的k值下的聚類效果
"""
score_all=[]
list1=range(2,6)
#其中i不能為0,也不能為1
for i in range(2,6):
    y_pred = KMeans(n_clusters=i, random_state=9).fit_predict(X)
    #畫出結果的散點圖
    plt.scatter(X[:, 0], X[:, 1], c=y_pred)
    plt.show()
    score=metrics.calinski_harabaz_score(X, y_pred)
    score_all.append(score)
    print(score)
"""
畫出不同k值對應的聚類效果
"""
plt.plt(list1,score_all)
plt.show()

 

原來的數據分布圖為:

k=2時,聚類情況:

k=3時,聚類情況:

k=4時的聚類效果:

k=5時的聚類效果:

不同k值對應的聚類效果折線圖:

我們可以看到,k=3時,哪個值最大,效果最好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM