手写体数字识别数据集降维与聚类分析:PCA、层次聚类和K-Means
手写体数字识别数据集降维与聚类分析:PCA、层次聚类和K-Means
本项目使用sklearn的手写体数字数据集Digits,进行PCA降维(保留85%能量)、层次聚类和K-Means聚类。实验中通过调整超参数,对比不同聚类方法的性能,并使用调整兰德指数(ARI)进行评价。
1. 数据预处理
首先加载数据集,将数据集中的每个样本转换成一个一维向量。然后将数据集划分为训练集和测试集。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
X = digits.data
y = digits.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2. PCA降维
使用sklearn的PCA类进行降维,将数据降到保留85%能量的维度。
from sklearn.decomposition import PCA
pca = PCA(n_components=0.85)
X_train_pca = pca.fit_transform(X_train)
3. 层次聚类
使用sklearn的AgglomerativeClustering类进行层次聚类,可调整的超参数包括聚类的类别数和距离度量方式。
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import adjusted_rand_score
n_clusters = [2, 3, 4, 5, 6, 7, 8, 9, 10]
linkage = ['ward', 'complete', 'average']
for n in n_clusters:
for l in linkage:
model = AgglomerativeClustering(n_clusters=n, linkage=l)
y_pred = model.fit_predict(X_train_pca)
score = adjusted_rand_score(y_train, y_pred)
print(f'n_clusters={n}, linkage={l}, score={score:.3f}')
4. K-Means聚类
使用sklearn的KMeans类进行K-Means聚类,可调整的超参数包括聚类的类别数和初始化方式。
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
n_clusters = [2, 3, 4, 5, 6, 7, 8, 9, 10]
init = ['k-means++', 'random']
for n in n_clusters:
for i in init:
model = KMeans(n_clusters=n, init=i)
model.fit(X_train_pca)
y_pred = model.predict(X_train_pca)
score = adjusted_rand_score(y_train, y_pred)
print(f'n_clusters={n}, init={i}, score={score:.3f}')
5. 评价指标
在本例中,使用调整兰德指数(Adjusted Rand Index,ARI)作为聚类的评价指标,ARI的取值范围在[-1, 1]之间,值越大表示聚类效果越好。在实际应用中,评价指标的选择应根据具体问题而定。
原文地址: https://www.cveoy.top/t/topic/op7b 著作权归作者所有。请勿转载和采集!