简介
在本实验中,我们将探索无监督学习的概念,特别是聚类和分解。无监督学习是机器学习的一种类型,在这种学习中,我们没有标记数据用于训练。相反,我们试图在没有任何先验知识的情况下在数据中找到模式或结构。聚类是一种常见的无监督学习技术,用于将相似的观测值分组在一起。另一方面,分解用于通过提取最重要的特征或组件来找到数据的低维表示。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,可以随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
使用 K 均值算法进行聚类
我们要探索的第一种技术是使用 K 均值算法进行聚类。K 均值是一种流行的聚类算法,旨在将观测值划分为称为簇的、分得很开的组。让我们以鸢尾花数据集为例来演示使用 K 均值算法进行聚类。
from sklearn import cluster, datasets
## 加载鸢尾花数据集
X_iris, y_iris = datasets.load_iris(return_X_y=True)
## 执行 K 均值聚类
k_means = cluster.KMeans(n_clusters=3)
k_means.fit(X_iris)
## 打印簇标签
print(k_means.labels_)
聚类评估
在执行聚类之后,评估结果非常重要。然而,在无监督学习中,我们无法获取真实标签。因此,在解释聚类结果时我们需要谨慎。通常基于轮廓系数(silhouette score)和簇内平方和等指标来评估聚类结果。这些指标可以提供有关聚类质量的见解。
矢量量化
聚类的一个应用是矢量量化,即我们使用聚类来选择少量的样本以压缩信息。例如,我们可以使用聚类来对图像进行色调分离:
import numpy as np
from sklearn import cluster, datasets
from sklearn.datasets import load_sample_image
import matplotlib.pyplot as plt
## 加载一张示例图像
image = load_sample_image("china.jpg")
## 转换为灰度图像
gray_image = image.mean(axis=2)
X = gray_image.reshape((-1, 1))
## 执行 K 均值聚类
k_means = cluster.KMeans(n_clusters=5, n_init=1)
k_means.fit(X)
## 使用聚类中心压缩图像
values = k_means.cluster_centers_.squeeze()
labels = k_means.labels_
face_compressed = np.choose(labels, values)
face_compressed.shape = gray_image.shape
## 显示原始图像和压缩后的图像
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('原始图像')
plt.subplot(1, 2, 2)
plt.imshow(face_compressed, cmap='gray')
plt.title('压缩后的图像')
plt.show()
总结
在本实验中,我们探索了无监督学习的概念,特别是聚类和分解。我们学习了 K 均值聚类、层次凝聚聚类、特征凝聚、主成分分析(PCA)和独立成分分析(ICA)。这些技术对于在无标签数据中发现模式和结构,以及找到能够捕获最重要信息的低维表示非常有价值。