结果。 评价kmean在集群的最佳数量, 我们迭代一系列的值, 找出其中的峰值的 性能

240719 聚类算法的评价_聚类算法

度量聚类算法的一个好方法是观察集群被分离的离散程度

# -*- coding: utf-8 -*-
 import numpy as np
 import matplotlib.pyplot as plt
 from sklearn import metrics
 from sklearn.cluster import KMeansimport utilities
# 加载数据
 data = utilities.load_data('data_perf.txt')scores = []
 range_values = np.arange(2, 10)for i in range_values:
     # 训练模型
     kmeans = KMeans(init='k-means++', n_clusters=i, n_init=10)
     kmeans.fit(data)
     score = metrics.silhouette_score(data, kmeans.labels_, 
                 metric='euclidean', sample_size=len(data))    print "\nNumber of clusters =", i
     print "Silhouette score =", score
                     
     scores.append(score)# 画出结果
 plt.figure()
 plt.bar(range_values, scores, width=0.6, color='k', align='center')
 plt.title('Silhouette score vs number of clusters')# 画出柱状图
 plt.figure()
 plt.scatter(data[:,0], data[:,1], color='k', s=30, marker='o', facecolors='none')
 x_min, x_max = min(data[:, 0]) - 1, max(data[:, 0]) + 1
 y_min, y_max = min(data[:, 1]) - 1, max(data[:, 1]) + 1
 plt.title('Input data')
 plt.xlim(x_min, x_max)
 plt.ylim(y_min, y_max)
 plt.xticks(())
 plt.yticks(())plt.show()