无监督学习:探寻数据的表示

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将探索无监督学习的概念,特别是聚类和分解。无监督学习是机器学习的一种类型,在这种学习中,我们没有标记数据用于训练。相反,我们试图在没有任何先验知识的情况下在数据中找到模式或结构。聚类是一种常见的无监督学习技术,用于将相似的观测值分组在一起。另一方面,分解用于通过提取最重要的特征或组件来找到数据的低维表示。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,可以随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 91%。获得了学习者 100% 的好评率。

使用 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)。这些技术对于在无标签数据中发现模式和结构,以及找到能够捕获最重要信息的低维表示非常有价值。