手写体数字识别数据集降维与聚类分析: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]之间,值越大表示聚类效果越好。在实际应用中,评价指标的选择应根据具体问题而定。

手写体数字识别数据集降维与聚类分析:PCA、层次聚类和K-Means

原文地址: https://www.cveoy.top/t/topic/op7b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录