简化数据:有效策略用于降低维度

2024-07-24

By Ruben Winastwan

简化数据:有效策略用于降低维度

如果你是数据科学从业者,你可能听说过训练机器学习模型的经验法则:拥有的数据越多,模型的性能就越好。然而,这个规则在所有情况下可能并不成立。

在本文中,我们将探讨这个问题,讨论拥有过多数据如何阻碍我们的机器学习模型的性能,以及我们可以采取哪些措施来解决这个问题。

那么,让我们开始吧!

维度的诅咒

在我们讨论拥有过多数据的挑战之前,理解维度的概念很重要。

在数据科学中,维度指的是数据集中的输入变量或特征的数量。例如,在房屋数据集中,维度可能包括房价、卧室数量、浴室数量、楼面面积、地址、建造年份和内部设施。

你可能会认为,向我们的机器学习模型添加更多维度会增强其性能。然而,情况往往相反。这是因为我们增加数据的维度越多,它就变得越稀疏。想象一下一条线(1D)——用少量数据点填充那个空间相对容易。对于一个矩形(2D),我们需要更多的数据点来覆盖它的面积。如果我们考虑一个立方体(3D),则需要更多的数据点来填充它。

我们可以将数据需要填充的空间称为特征空间。更高的维度意味着更大的特征空间,需要更多的数据点来从我们的数据中提取有意义的信息。

更高的维度会导致几个问题:

计算资源:更多维度需要增加计算资源来进行数据处理。

数据稀疏性:随着特征空间的扩展,数据点可能会更加分散,使机器学习模型的聚类和分类任务变得复杂。

模型性能下降:更大的特征空间可能会降低依赖距离度量的算法(如KNN或k均值聚类)的性能。此外,过多的维度可能导致过拟合,模型过于贴近数据,难以泛化到未见数据点。

可视化困难:高维数据难以可视化,使其更难以分析和解释。

上述问题被称为“维度的诅咒”。

那么,我们如何减轻维度的诅咒并获得数据的内在维度呢?有几种方法可以解决这个问题,我们将在下一节中探讨。

降维算法

为了解决维度诅咒问题,数据科学中应用了几种常见的降维技术。这些算法包括主成分分析(PCA)、t分布随机邻域嵌入(t-SNE)和均匀流形近似和投影(UMAP)。

主成分分析(PCA)

PCA可能是最知名的降维技术之一。本质上,PCA将数据投影到保留最大方差的轴上。这是什么意思呢?考虑以下2D特征空间中数据点的示例。

PCA是数据分析和机器学习中的关键工具,可用于将维度降低到1D(一条线)。首先,PCA寻找保留我们数据点最多信息的轴,确保在将数据投影到1D时保留重要信息。如上图右侧的可视化所示,较长的向量代表了与较短向量相比,保留了我们数据中最多信息的投影。

PCA选择保留最多信息的投影。因此,它选择较长的向量作为第一轴。接下来,它确定第二轴,该轴与第一投影正交,并保留我们数据中的第二多信息。

在我们上面的2D特征空间示例中,第二轴将与上图中较短的向量对齐。如果我们有3D或更高维度的特征空间,PCA也会确定第三轴。

PCA算法选择的轴被称为主成分。一旦所有主成分都确定后,PCA将我们的特征空间投影到较低的维度,如下图所示。

t分布随机邻域嵌入(t-SNE)

当处理包含非线性可分数据点的数据集时,PCA可能不会产生良好的结果。考虑下图中3D空间中的瑞士卷数据集。不同类别的数据点分散在整个特征空间中。在这种情况下,线性PCA可能无法提供有意义的投影,如下图右侧所示。

基于投影的算法可能不是处理非线性可分数据点的最佳解决方案。这就是像t-SNE这样的流形算法发挥作用的地方。

t-SNE是2002年首次引入的原始SNE算法的改进。t-SNE中的“t”表示它使用t分布而不是正态高斯分布来计算低维空间中每个数据点之间的相似性。

t分布的一个特点是它比高斯分布有更重的尾部。这个特性使t-SNE算法能够在更稀疏的距离上可视化不同的聚类。

假设我们在2D特征空间中的数据点散布,我们希望将其维度降低到1D。

对于每个数据点xi,算法使用以xi为中心的高斯分布估计每个邻居xj的相似性。这一步的结果是每个邻居的概率,我们称之为Pij。

以xi为中心的高斯分布的方差取决于xi附近数据点的密度。这个参数通常在t-SNE中被称为困惑度。数据点周围的密度越高,困惑度值就越高。考虑到每个数据点周围的不同密度,我们可能会得到具有不同方差的分布。

由于密度的多样性,算法将xi与其邻居之间的相似性标准化,使得总相似性加起来为1。

在下一步中,算法旨在在低维空间中找到一个与Pij非常相似的概率Qij。为了衡量Pij和Qij之间的相似性,t-SNE使用Kullback-Leibler(KL)散度,由以下方程表示:

这个KL散度方程使用梯度下降算法进行优化,类似于用于优化回归算法的算法。

均匀流形近似和投影(UMAP)

虽然t-SNE通常在处理复杂数据点方面表现出色,但执行此算法所需的计算资源可能非常高,特别是对于大型数据集。这是因为需要计算每个数据点的成对相似性。UMAP是管理非线性可分和复杂数据点的t-SNE的可行替代方案。

在高层次上,UMAP的运作方式类似于t-SNE。它使用优化技术将数据的高维表示转换为其低维对应物。

UMAP使用基于图的算法来识别高维空间中的数据结构。具体来说,它采用了模糊单纯复形算法。如果你熟悉图算法,这本质上是一个带有加权边的图。权重表示两个数据点连接的可能性。

考虑下图所示的2D散点图:

图片来源:UMAP文档

从这些数据点构建图时,我们首先指定每个数据点应考虑的最近邻点数(n)。然后,UMAP根据到第n个最近邻点的距离从每个点向外扩展半径。如果它们的半径重叠,数据点将连接到其邻居。

然而,随着半径的扩展,连接的可能性(边的权重)会降低。这种方法确保了每个数据点至少与其最近的邻居之一连接。它在高维空间的全局结构和低维空间的局部结构之间保持了平衡。

图片来源:UMAP文档

一旦在高维空间中构建了图,算法就旨在通过类似于t-SNE的优化函数,尽可能相似地在低维空间中复制这个布局。

UMAP和t-SNE之间最显著的区别在于全局和局部结构之间的平衡。在大多数情况下,UMAP更擅长在最终的低维空间投影中保留数据的全局结构。这意味着簇间关系在UMAP中比在t-SNE中更有意义。

降维实现

在本节中,我们将使用上一节讨论的所有三种算法对MNIST手写数字数据集进行降维。为此,我们将使用流行的机器学习库Scikit-learn。让我们首先加载手写数字数据。

图片来源:Wikipedia

我们的数据集包括从0到9的手写数字图像,总共70,000张图像。每张图像是28 x 28像素矩阵的展开版本,结果有784个维度。因此,我们数据的形状是(70,000, 784)。

我们可以使用Scikit-learn库初始化PCA和t-SNE,而对于UMAP,我们需要从一个基于Scikit-learn构建的独立库中初始化。我们将使用库的默认值作为每个算法的参数。接下来,我们将用我们的数据拟合每个算法并应用降维。

图片来源:作者

正如你从上面的可视化中看到的,PCA的降维不足以捕捉我们数据中的有意义信息。这是可以理解的,因为PCA是一个投影算法,当数据在线性可分时表现最佳。前几个主成分可以解释数据的方差。然而,这并不适用于我们的MNIST数据集。

另一方面,t-SNE和UMAP的结果相当不错。我们可以观察到由属于不同类别的数据点形成的不同聚类。UMAP形成的聚类比t-SNE略好,错误分类的数字较少。从运行时间的角度来看,UMAP也优于t-SNE,因为t-SNE的计算复杂度随着数据点数量的增加而增加。

降维算法的应用

除了在数据可视化中非常有用外,本文讨论的所有降维算法在不同的用例中都提供了各种好处:

自然语言处理(NLP)任务:这些算法可以可视化大型文本语料库中的词嵌入,使识别语义相似的词更容易。

聚类和分类任务:它们可以帮助在低维空间中创建数据点的分段或聚类,便于识别数据中的模式和趋势。

异常检测:这些算法可以识别数据中的异常值,使我们能够在数据分析中适当地处理它们。

计算机视觉:它们可以协助压缩图像或视频数据,实现高效的数据存储而不丢失重要信息。

特征选择和特征工程:这些算法可以移除冗余特征,提高机器学习模型的性能和可解释性。

结论

我们的数据中特征过多可能导致维度的诅咒问题,其中特征空间变得过大。这引入了几个问题,如数据稀疏性、模型性能下降和数据解释困难。降维算法通过将数据投影到较低维度的空间来解决这些问题,同时保留数据的全局结构。

当数据点在线性可分时,PCA会产生出色的结果,前几个主成分可以解释数据的方差。对于更复杂的数据点,t-SNE和UMAP是更好的选择。然而,在处理大量数据点时,由于UMAP的计算效率优于t-SNE,因此更倾向于使用UMAP。

我们希望本文能帮助你开始了解降维的概念。祝你学习愉快!

  • Ruben Winastwan

    Ruben Winastwan

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud