本次实验需要用到的数据集包括:

  • MNIST_train.csv:手写体识别数据集,包含60000个28x28的灰度图像,每个图像有784个像素点。
  • data_clustering_flame.csv:用于测试聚类算法的数据集。
  • .DS_Store:MacOS系统下的一个隐藏文件,可以忽略。

首先读入MNIST_train.csv数据集,并进行PCA降维。

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

# 读入数据
data = pd.read_csv('MNIST_train.csv')

# 提取像素点信息
X = data.iloc[:, 1:].values

# PCA降维
pca = PCA(n_components=0.85)  # 保留85%的能量
X_pca = pca.fit_transform(X)
print('降维后的数据维度:', X_pca.shape)

接下来,我们使用层次聚类方法对数据进行聚类。这里我们选择使用scipy库中的hierarchy模块。

from scipy.cluster import hierarchy

# 层次聚类
Z = hierarchy.linkage(X_pca, method='ward')  # 使用Ward方法
labels = hierarchy.fcluster(Z, t=30, criterion='distance')  # 距离阈值为30

print('层次聚类后的簇数:', len(np.unique(labels)))

在层次聚类方法中,我们需要选择簇的数量或者设定距离阈值来停止聚类。这里我们选择设定距离阈值为30,即距离小于30的样本会被分到同一个簇中。

接下来,我们使用K-Means方法对数据进行聚类。这里我们选择使用sklearn库中的KMeans模块。

from sklearn.cluster import KMeans

# K-Means聚类
kmeans = KMeans(n_clusters=10, random_state=0)  # 设定簇的数量为10
kmeans.fit(X_pca)
labels = kmeans.labels_

print('K-Means聚类后的簇数:', len(np.unique(labels)))

在K-Means方法中,我们需要选择簇的数量。这里我们选择设定簇的数量为10。

接下来,我们需要对聚类结果进行评价。这里我们选择使用轮廓系数。

from sklearn.metrics import silhouette_score

# 评价聚类结果
score = silhouette_score(X_pca, labels)
print('轮廓系数:', score)

轮廓系数的取值范围为[-1, 1],值越大表示聚类效果越好。

完整代码如下

根据提供的预处理过的MNIST手写体识别数据集及相关资料使用PCA进行降维保留85的能量应用层次聚类和K-Means方法进行聚类。用实验方法选取聚类方法中超参数并对聚类的效果进行评价。需要在实验报告中给出完整实现代码、运行结果、评价指标。所给数据为data_clustering_flamecsv、MNIST_traincsv和DS_Store部分数据如下所示:label	pixel0	pixel1

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

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