降维任务中的非线性与深度降维方法解析
在数据处理和机器学习领域,降维是一项至关重要的任务,它能够将高维数据转换为低维数据,从而简化数据结构、减少计算量并提高模型的效率。本文将深入探讨非线性降维、深度降维以及一些典型的降维算法。
1. 非线性降维
非线性降维采用非线性方法将高维数据映射到低维空间,主要包含四种亚型:距离矩阵法、核方法、流形学习和邻域嵌入。
1.1 距离矩阵法
距离矩阵,也被称为相异矩阵,是一个方阵,包含数据集中数据点之间的成对距离。假设有 $n$ 个数据点 ${x_1, x_2, \ldots, x_n}$,距离矩阵 $D = [d_{ij}]$,其中 $d_{ij} = d(x_i, x_j)$,$i, j = 1, 2, \ldots, n$,并且当 $i = j$ 时,$d_{ij} = 0$,即矩阵对角线上的元素为零。
根据应用场景,距离矩阵可分为度量距离矩阵、非度量距离矩阵和多维尺度分析(MDS):
-
度量距离矩阵
:非对角线元素 $d_{ij} = d(x_i, x_j)$($i \neq j$)表示 $x_i$ 和 $x_j$ 之间的距离,例如欧几里得距离。
-
非度量距离矩阵
:非对角线元素 $d_{ij} = d(x_i, x_j)$($i \neq j$)是 $x_i$ 和 $x_j$ 之间类似距离的信息,例如它们之间的排名顺序。
-
多维尺度分析(MDS)
:是一种基于距离矩阵的非线性降维方法,用于信息可视化,后续会详细介绍。
下面是距离矩阵法的流程:
graph LR
A[定义数据集] --> B[计算距离矩阵]
B --> C{判断矩阵类型}
C -->|度量距离矩阵| D[使用度量距离计算元素]
C -->|非度量距离矩阵| E[使用非度量距离信息]
C -->|多维尺度分析| F[进行MDS降维]
1.2 核方法
核方法是机器学习中用于模式分析的一类算法,也可用于降维算法。通过使用核函数替换线性算法中的线性函数,可以将任何线性模型转换为非线性模型。使用核方法进行降维就是将线性降维转换为非线性降维。
主要的非线性降维算法包括:
-
核主成分分析(kernel PCA)
:是基于核方法的主成分分析(PCA)的扩展。使用核方法后,主成分分析的原始线性运算在再生核希尔伯特空间中进行。
-
核费舍尔判别分析(kernel FDA)
:也称为广义判别分析和核判别分析,是基于核方法的费舍尔判别分析(FDA)的扩展。
核方法降维的步骤如下:
1. 选择合适的核函数。
2. 将核函数应用于线性降维算法。
3. 进行非线性降维操作。
1.3 流形学习
流形学习是一种基于流形的非线性降维机器学习方法。流形这个术语源自德国数学家伯恩哈德·黎曼命名的德语术语 “mannigfaltigkeit”。
一个 $n$ 维流形是一个拓扑空间,其中每个点都有一个邻域,该邻域与 $n$ 维欧几里得空间的一个开子集同胚。流形学习基于流形假设,即现实世界中的许多高维数据集实际上位于高维空间中的低维潜在流形上。
代表性的流形学习算法包括:
-
等距映射(Isomap)
:2000 年提出,计算高维流形上数据点之间的距离时,使用微分几何中的测地距离而非传统的欧几里得距离。
-
局部线性嵌入(LLE)
:2000 年提出,在小邻域内找到最佳线性重构,然后将数据点嵌入低维空间。
-
拉普拉斯特征映射(LE)
:2003 年提出,基于图拉普拉斯算子、流形上的拉普拉斯 - 贝尔特拉米算子和热方程之间的对应关系,用于高维数据表示。
-
局部切空间对齐(LTSA)
:2005 年提出,通过从参数化流形中采样的一组数据点学习流形的局部几何,构建每个数据点的切空间近似,然后对齐这些切空间以给出数据点相对于底层流形的全局坐标。
-
归纳流形学习
:2014 年提出,使用结构化支持向量机学习从高维数据表示到低维坐标的映射。
-
对称正定流形(SPD 流形)
:2017 年提出,通过构建低维 SPD 流形来处理高维 SPD 矩阵进行降维。
流形学习的流程:
graph LR
A[定义高维数据集] --> B[基于流形假设]
B --> C[选择流形学习算法]
C --> D[进行降维操作]
D --> E[得到低维数据]
1.4 邻域嵌入
邻域嵌入是从邻域图演变而来的一类非线性降维方法,包括随机邻域嵌入(SNE)、t - 分布随机邻域嵌入(t - SNE)和均匀流形近似与投影(UMAP)。
-
随机邻域嵌入(SNE)
:2002 年由杰弗里·辛顿的团队提出,是一种概率方法,将数据点之间的欧几里得距离转换为高斯邻域的相似度,以保留邻域身份的方式将高维数据嵌入低维空间。其损失函数是 KL 散度的总和,通过梯度下降进行最小化。
-
t - 分布随机邻域嵌入(t - SNE)
:2008 年提出,是 SNE 的变体。在 SNE 算法中,高维输入空间和低维空间都使用高斯分布,这在嵌入高维数据到低维空间时会导致拥挤问题。t - SNE 为低维嵌入空间使用 t - 分布,其钟形曲线的尾部比高斯分布大得多,更容易拟合高维数据信息。
-
均匀流形近似与投影(UMAP)
:2018 年提出,在数据可视化方面与 t - SNE 有很多相似之处,但它基于三个数据假设:数据在黎曼流形上均匀分布、黎曼度量在局部是常数或近似局部常数、流形在局部是连通的。
邻域嵌入算法的比较如下表所示:
| 算法名称 | 提出时间 | 特点 |
| ---- | ---- | ---- |
| 随机邻域嵌入(SNE) | 2002 年 | 概率方法,保留邻域身份 |
| t - 分布随机邻域嵌入(t - SNE) | 2008 年 | 解决拥挤问题 |
| 均匀流形近似与投影(UMAP) | 2018 年 | 基于特定数据假设 |
2. 深度降维
深度降维是基于深度人工神经网络的一类降维方法,代表性算法包括深度自编码器和变分自编码器。
2.1 深度自编码器
深度自编码器由杰弗里·辛顿等人在 2006 年提出,是基于深度自编码器的第一种降维方法。用于降维的深度自编码器是欠完备自编码器(UAE),其潜在空间层的维度小于输入和输出空间的维度,逻辑上分为编码器和解码器。编码器将高维输入数据转换为潜在空间层的低维编码,解码器恢复低维编码,从而实现数据降维的目的。深度自编码器可以看作是主成分分析(PCA)的非线性推广,并且在提取数据的低维特征方面远优于经典的降维方法。
深度自编码器的工作流程:
graph LR
A[输入高维数据] --> B[编码器]
B --> C[低维编码]
C --> D[解码器]
D --> E[输出恢复数据]
2.2 变分自编码器
变分自编码器(VAE)是基于概率图模型的生成模型,由于其基本架构是编码器 - 解码器,也可用于降维。变分自编码器引入了变分贝叶斯方法,其潜在空间由概率分布而非固定向量组成,因此可用于生成和降维,并且其降维功能优于传统的自编码器。
3. 典型算法
以下介绍几种典型的降维算法。
3.1 主成分分析(PCA)
主成分分析是一种常用的线性降维方法,由英国数学家卡尔·皮尔逊在 1901 年发明,美国数学统计学家哈罗德·霍特林在 20 世纪 30 年代独立开发并命名。
形式化描述如下:设 $\mathbb{R}^h$ 和 $\mathbb{R}^l$($h \gg l$)分别表示高维和低维实向量集合,给定一个包含 $n$ 个数据点的数据集 $D_{high} = {x_i | i = 1, \ldots, n} \subseteq \mathbb{R}^h$,主成分分析的目的是找到一个低维线性子空间 $D_{low} \subseteq \mathbb{R}^l$,并将高维数据集 $D_{high}$ 映射到低维线性子空间 $D_{low}$,形成一个新的坐标系,其中每个坐标轴代表一个主成分(PC)。这些主成分是原始高维数据的正交线性变换,第一个主成分是方差最大的正交轴,依此类推。
第 $k$ 行($k = 1, \ldots, n$)的数据点和系数的线性组合表示为:
$z_k = \sum_{j = 1}^{n} w_{kj} x_j = X w_k$
其中 $X = [x_1 x_2 \cdots x_n]$ 是一个 $h \times n$ 的数据矩阵,$w_k = [w_{k1} w_{k2} \cdots w_{kn}]^T$ 是长度为 $n$ 的权重向量。
设 $U_k$ 为第 $k$ 个主成分,其最大方差为:
$U_k = \max (var (z_k)) = \max (var (X w_k)) = \max (w_k^T S w_k)$
其中 $S$ 表示 $n \times n$ 的协方差矩阵。
为了最大化方差 $var (w_k^T S w_k)$,同时限制 $w_k$ 为单位范数向量,即 $w_k^T w_k = 1$,则 $U_k$ 的最大化可以重写为:
$U_k = \max (w_k^T S w_k) = \arg \max_{w_k^T w_k = 1} (w_k^T S w_k - \lambda_k (w_k^T w_k - 1))$
对 $w_k$ 求导并令其为零,可得:
$S w_k - \lambda_k w_k = 0$,即 $S w_k = \lambda_k w_k$
其中 $w_k$ 是协方差矩阵 $S$ 的单位范数特征向量,$\lambda_k$ 是相应的特征值。因此,第 $k$ 个主成分 $U_k$ 等于特征值 $\lambda_k$ 的最大值。
通常使用前两个主成分绘制二维数据图,以可视化降维后数据点的聚类情况。
主成分分析的步骤:
1. 计算数据集的协方差矩阵。
2. 求解协方差矩阵的特征值和特征向量。
3. 选择前 $l$ 个最大特征值对应的特征向量。
4. 将高维数据投影到这些特征向量构成的低维子空间。
3.2 多维尺度分析(MDS)
多维尺度分析是一种非线性降维方法,使用一组相关的排序技术进行信息可视化,具体是基于距离矩阵表示高维数据信息。“尺度” 这个术语来自心理测量学,它根据一定规则为一些抽象概念(对象)分配数字,例如用数字量化客户满意度,“5” 表示 “非常满意”,“1” 表示 “非常不满意”。
多维尺度分析的流程:
graph LR
A[构建距离矩阵] --> B[确定降维维度]
B --> C[进行MDS计算]
C --> D[输出低维数据表示]
综上所述,不同的降维方法适用于不同的数据集和应用场景。线性降维方法如主成分分析简单高效,而非线性降维和深度降维方法则能更好地处理复杂的数据结构。在实际应用中,需要根据数据的特点和任务的需求选择合适的降维算法。
降维任务中的非线性与深度降维方法解析
4. 算法选择与应用场景
在实际应用中,选择合适的降维算法至关重要,它取决于数据的特点、任务的需求以及计算资源的限制。以下是不同降维算法的适用场景分析:
| 算法类型 | 算法名称 | 适用场景 |
|---|---|---|
| 线性降维 | 主成分分析(PCA) | 数据具有线性结构,希望保留数据的最大方差,用于数据可视化、数据预处理等。 |
| 非线性降维 | 多维尺度分析(MDS) | 基于数据点之间的距离信息进行可视化,适用于需要展示数据间相似性的场景。 |
| 非线性降维 | 核主成分分析(kernel PCA) | 数据具有非线性结构,需要在高维空间中寻找主成分,适用于复杂数据的特征提取。 |
| 非线性降维 | 核费舍尔判别分析(kernel FDA) | 有类别标签的数据,希望在降维的同时实现类别区分,用于分类任务。 |
| 非线性降维 | 等距映射(Isomap) | 数据位于低维流形上,需要保留数据的全局几何结构,适用于流形学习任务。 |
| 非线性降维 | 局部线性嵌入(LLE) | 数据具有局部线性结构,关注数据的局部特征,适用于局部特征重要的场景。 |
| 非线性降维 | 拉普拉斯特征映射(LE) | 数据具有局部连接性,希望保留数据的局部邻域关系,用于图数据降维。 |
| 非线性降维 | 局部切空间对齐(LTSA) | 数据位于复杂流形上,需要学习流形的局部几何结构,适用于复杂流形数据的降维。 |
| 非线性降维 | 归纳流形学习 | 希望从高维数据表示学习到低维坐标映射,适用于需要学习映射关系的场景。 |
| 非线性降维 | 对称正定流形(SPD manifold) | 处理高维 SPD 矩阵,通过构建低维 SPD 流形进行降维,适用于相关矩阵数据的降维。 |
| 非线性降维 | 随机邻域嵌入(SNE) | 数据可视化,希望保留数据的邻域关系,适用于展示数据分布的场景。 |
| 非线性降维 | t - 分布随机邻域嵌入(t - SNE) | 高维数据可视化,解决 SNE 的拥挤问题,适用于复杂高维数据的可视化。 |
| 非线性降维 | 均匀流形近似与投影(UMAP) | 数据可视化,基于特定数据假设,适用于快速可视化大规模数据。 |
| 深度降维 | 深度自编码器 | 数据具有复杂的非线性结构,希望学习数据的低维表示,适用于特征提取和数据压缩。 |
| 深度降维 | 变分自编码器 | 数据生成和降维,希望潜在空间具有概率分布,适用于生成模型和数据降维。 |
5. 降维算法的评估指标
为了评估降维算法的性能,通常使用以下几种指标:
-
重构误差 :衡量降维后的数据与原始数据之间的差异。对于自编码器等可以重构数据的算法,重构误差是一个重要的评估指标。计算公式为:
$重构误差 = \frac{1}{n} \sum_{i = 1}^{n} ||x_i - \hat{x}_i||^2$
其中 $x_i$ 是原始数据点,$\hat{x}_i$ 是降维后重构的数据点,$n$ 是数据点的数量。 -
保留方差比例 :对于主成分分析等基于方差的降维算法,保留方差比例表示降维后保留的原始数据方差的比例。计算公式为:
$保留方差比例 = \frac{\sum_{i = 1}^{l} \lambda_i}{\sum_{i = 1}^{h} \lambda_i}$
其中 $\lambda_i$ 是协方差矩阵的特征值,$h$ 是原始数据的维度,$l$ 是降维后的维度。 -
邻域保持度 :衡量降维后数据的邻域关系是否与原始数据一致。可以通过计算降维前后数据点的 $k$ 近邻集合的交集比例来评估。
6. 降维算法的实现示例
以下是使用 Python 和常见机器学习库实现几种降维算法的示例代码:
import numpy as np
from sklearn.decomposition import PCA, KernelPCA
from sklearn.manifold import MDS, Isomap, LocallyLinearEmbedding
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成示例数据
X, y = make_blobs(n_samples=100, n_features=10, centers=3, random_state=42)
# 主成分分析(PCA)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 核主成分分析(kernel PCA)
kpca = KernelPCA(n_components=2, kernel='rbf')
X_kpca = kpca.fit_transform(X)
# 多维尺度分析(MDS)
mds = MDS(n_components=2)
X_mds = mds.fit_transform(X)
# 等距映射(Isomap)
isomap = Isomap(n_components=2)
X_isomap = isomap.fit_transform(X)
# 局部线性嵌入(LLE)
lle = LocallyLinearEmbedding(n_components=2)
X_lle = lle.fit_transform(X)
# 可视化降维结果
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
axes[0, 0].scatter(X[:, 0], X[:, 1], c=y)
axes[0, 0].set_title('Original Data')
axes[0, 1].scatter(X_pca[:, 0], X_pca[:, 1], c=y)
axes[0, 1].set_title('PCA')
axes[0, 2].scatter(X_kpca[:, 0], X_kpca[:, 1], c=y)
axes[0, 2].set_title('Kernel PCA')
axes[1, 0].scatter(X_mds[:, 0], X_mds[:, 1], c=y)
axes[1, 0].set_title('MDS')
axes[1, 1].scatter(X_isomap[:, 0], X_isomap[:, 1], c=y)
axes[1, 1].set_title('Isomap')
axes[1, 2].scatter(X_lle[:, 0], X_lle[:, 1], c=y)
axes[1, 2].set_title('LLE')
plt.show()
上述代码生成了一个示例数据集,并使用 PCA、Kernel PCA、MDS、Isomap 和 LLE 进行降维,最后将降维结果可视化。
7. 总结与展望
降维是数据处理和机器学习中的重要任务,它可以帮助我们简化数据结构、减少计算量、提高模型性能和进行数据可视化。本文介绍了线性降维、非线性降维和深度降维的多种算法,包括主成分分析、多维尺度分析、核方法、流形学习、邻域嵌入、深度自编码器和变分自编码器等。不同的降维算法适用于不同的数据特点和应用场景,在实际应用中需要根据具体情况进行选择。
未来,随着数据规模的不断增大和数据结构的日益复杂,降维算法将面临更多的挑战和机遇。一方面,需要开发更高效、更准确的降维算法,以处理大规模和高维数据;另一方面,需要探索降维算法与其他机器学习技术的结合,如深度学习、强化学习等,以实现更强大的数据分析和处理能力。同时,降维算法在生物信息学、计算机视觉、自然语言处理等领域的应用也将不断拓展,为这些领域的发展提供有力支持。
总之,降维算法在数据科学和机器学习中具有重要的地位,我们需要不断深入研究和探索,以推动这一领域的发展和应用。
超级会员免费看
356

被折叠的 条评论
为什么被折叠?



