根据提供的预处理过的MNIST手写体识别数据集及相关资料使用PCA进行降维保留85的能量应用层次聚类和K-Means方法进行聚类。用实验方法选取聚类方法中超参数并对聚类的效果进行评价。需要在实验报告中介绍下数据集的结构程序算法原理及运行结果、评价指标和运行代码
一、数据集结构
MNIST数据集是一个经典的手写数字识别数据集,包含60000个训练样本和10000个测试样本。每个样本是一个28x28像素的灰度图像,标签是0-9之间的数字。
二、PCA降维
PCA是一种常用的降维方法,可以将高维数据转换为低维数据,同时保留尽可能多的原始信息。PCA的基本思想是将高维数据映射到低维空间上,使得映射后的数据方差最大。具体实现可以通过求取数据的协方差矩阵,然后对协方差矩阵进行特征值分解得到主成分,进而进行降维。
在本次实验中,我们使用Python中的sklearn库实现PCA降维。具体代码如下:
from sklearn.decomposition import PCA
# 将数据集进行PCA降维
pca = PCA(n_components=0.85) # 保留85%的能量
pca.fit(X_train)
X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)
三、层次聚类
层次聚类是一种自下而上的聚类方法,其基本思想是将数据集中的每个样本看作一个簇,然后逐步合并相似的簇,直到所有样本都在同一个簇中。层次聚类有两种主要的实现方式:凝聚聚类和分裂聚类。凝聚聚类是从下往上合并簇,而分裂聚类则是从上往下划分簇。在本次实验中,我们使用凝聚聚类实现手写数字识别数据集的聚类。
在sklearn库中,我们可以使用AgglomerativeClustering类来实现层次聚类。具体代码如下:
from sklearn.cluster import AgglomerativeClustering
# 进行层次聚类
agg = AgglomerativeClustering(n_clusters=10)
agg.fit(X_train_pca)
# 计算聚类效果
from sklearn.metrics import accuracy_score
y_pred = agg.labels_
accuracy = accuracy_score(y_train, y_pred)
print('Accuracy:', accuracy)
四、K-Means聚类
K-Means聚类是一种经典的聚类方法,其基本思想是将数据集分为K个簇,每个簇的中心点位于簇内所有样本的平均位置。K-Means聚类需要预先设定簇的数量K,然后通过交替更新每个样本所属的簇和每个簇的中心点来实现聚类。在本次实验中,我们使用K-Means聚类实现手写数字识别数据集的聚类。
在sklearn库中,我们可以使用KMeans类来实现K-Means聚类。具体代码如下:
from sklearn.cluster import KMeans
# 进行K-Means聚类
kmeans = KMeans(n_clusters=10)
kmeans.fit(X_train_pca)
# 计算聚类效果
y_pred = kmeans.labels_
accuracy = accuracy_score(y_train, y_pred)
print('Accuracy:', accuracy)
五、超参数选择
在聚类算法中,超参数的选择对聚类效果有很大的影响。在本次实验中,我们使用轮廓系数(silhouette score)作为评价指标,来帮助选择合适的超参数。轮廓系数是一种衡量聚类效果的指标,其取值范围在[-1, 1]之间,越接近1表示聚类效果越好。
在sklearn库中,我们可以使用silhouette_score函数来计算轮廓系数。具体代码如下:
from sklearn.metrics import silhouette_score
# 计算层次聚类的轮廓系数
for n_clusters in range(2, 11):
agg = AgglomerativeClustering(n_clusters=n_clusters)
agg.fit(X_train_pca)
y_pred = agg.labels_
score = silhouette_score(X_train_pca, y_pred)
print('Agg n_clusters:', n_clusters, 'Score:', score)
# 计算K-Means聚类的轮廓系数
for n_clusters in range(2, 11):
kmeans = KMeans(n_clusters=n_clusters)
kmeans.fit(X_train_pca)
y_pred = kmeans.labels_
score = silhouette_score(X_train_pca, y_pred)
print('KMeans n_clusters:', n_clusters, 'Score:', score)
六、运行代码
完整的实验代码如下
原文地址: https://www.cveoy.top/t/topic/fLmg 著作权归作者所有。请勿转载和采集!