kmeans聚类算法python实现yale数据集
时间: 2025-05-14 14:00:44 浏览: 17
### KMeans 聚类算法在 Yale 数据集上的应用
为了使用 Python 对 Yale 数据集进行 KMeans 聚类分析,可以采用 `scikit-learn` 库中的 KMeans 方法。以下是完整的解决方案:
#### 1. 导入必要的库
首先需要导入所需的 Python 库来加载数据并执行聚类操作。
```python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
```
上述代码片段展示了如何引入必要模块以支持后续的数据处理和可视化工作[^2]。
#### 2. 加载 Yale 数据集
Yale 数据集可以通过 OpenML 平台获取。这里展示了一个简单的加载过程。
```python
# 下载 Yale Face Database B (ID:41069)
data = fetch_openml(name='YaleFace', version=1)
X = data.data / 255.0 # 归一化像素值至 [0, 1]
print(f"Data shape: {X.shape}") # 输出数据形状
```
此部分说明了通过 `fetch_openml` 函数下载 Yale 数据集的方法,并对其进行了初步预处理[^1]。
#### 3. 执行 KMeans 聚类
接下来定义模型参数并将数据传递给 KMeans 进行训练。
```python
n_clusters = 15 # 假设我们知道有 15 类人脸图像
kmeans_model = KMeans(n_clusters=n_clusters, random_state=42).fit(X)
labels = kmeans_model.labels_
centroids = kmeans_model.cluster_centers_
print(f"Cluster labels assigned to each sample:\n{labels}")
```
该段描述了设置集群数量以及调用 fit() 方法完成建模的过程。
#### 4. 可视化结果
最后一步是对聚类效果进行评估并通过降维技术绘制图表以便直观观察。
```python
# 使用 PCA 将特征降到二维空间用于绘图
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(X)
plt.figure(figsize=(8, 6))
for i in range(n_clusters):
cluster_points = reduced_data[np.where(labels == i)]
plt.scatter(cluster_points[:, 0], cluster_points[:, 1], label=f'Cluster {i}')
plt.title('KMeans Clustering on Yale Dataset')
plt.legend()
plt.show()
# 显示质心图片
fig, axes = plt.subplots(1, n_clusters, figsize=(15, 3))
for ax, center in zip(axes.ravel(), centroids):
img = center.reshape((int(np.sqrt(center.size)), int(np.sqrt(center.size))))
ax.imshow(img, cmap=plt.cm.gray)
ax.axis('off')
plt.suptitle('Centroid Images of Each Cluster')
plt.show()
```
以上脚本不仅包含了利用主成分分析降低维度后的散点分布情况,还呈现了各个簇中心对应的平均脸像[^5]。
---
###
阅读全文
相关推荐



















