数据聚类是无监督学习的主流应用之一,最为经典且易用的聚类模型是K均值算法(K-means)
该算法要求我们预先设定聚类的个数,然后不断更新聚类中心;经过几轮迭代,最后的目标就是要让所有数据点到其所属聚类中心距离的平方和趋于稳定。
下面将使用K-means聚类对手写体数据提取图像特征。
导入数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
digits_train = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra', header=None)
digits_test = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes', header=None)
确定特征值与标签值
X_train = digits_train[np.arange(64)]
y_train = digits_train[64]
X_test = digits_test[np.arange(64)]
y_test = digits_test[64]
K-means设置10个聚类中心
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=10)
kmeans.fit(X_train)
y_pred = kmeans.predict(X_test)
对K-Means测评
from sklearn import metrics
print(metrics.adjusted_rand_score(y_test, y_pred))
如果被用于评估的数据没有所属类别,那么就使用轮廓系数(Silhouette Coefficient)来度量聚类结果的质量。
轮廓系数同时兼顾聚类的凝聚度(Cohesion)和分离度(Separation),用来评估聚类的效果,并且取值范围为[-1,1]
轮廓系数越大,表示聚类效果越好。