数据集的输入变量或特征的数量称为其维度。
降维是指减少数据集中输入变量数量的技术。
更多的输入特征通常会使预测建模任务更具挑战性,这通常被称为维度诅咒。
高维统计和降维技术常用于数据可视化。然而,这些技术也可以应用于机器学习中,以简化分类或回归数据集,从而更好地拟合预测模型。
在这篇文章中,您将了解机器学习降维的简要介绍。
阅读本文后,你将了解:
- 大量的输入特征可能导致机器学习算法性能不佳。
- 降维是一个通用的研究领域,旨在减少输入特征的数量。
- 降维方法包括特征选择、线性代数方法、投影方法和自编码器。
通过我的新书《机器学习数据准备》启动您的项目,其中包括分步教程和所有示例的Python源代码文件。
让我们开始吧。
- 2020年5月更新:修改了章节标题以更准确。

机器学习降维简介
照片由Kevin Jarrett提供,保留部分权利。
概述
本教程分为三个部分;它们是:
- 许多输入变量的问题
- 降维
- 降维技术
- 特征选择方法
- 矩阵分解
- 流形学习
- 自编码器方法
- 降维技巧
许多输入变量的问题
机器学习算法的性能可能因过多的输入变量而下降。
如果您的数据以行和列的形式表示,例如在电子表格中,那么输入变量就是作为模型输入以预测目标变量的列。输入变量也称为特征。
我们可以将数据的列视为n维特征空间中的维度,将数据的行视为该空间中的点。这是数据集的一个有用的几何解释。
特征空间中维度数量过多可能意味着该空间的体积非常大,反过来,该空间中的点(数据行)通常代表一个很小且不具代表性的样本。
这会极大地影响在具有许多输入特征的数据上拟合的机器学习算法的性能,通常称为“维度灾难”。
因此,通常希望减少输入特征的数量。
这减少了特征空间的维度,因此得名“降维”。
想开始学习数据准备吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
降维
降维是指减少训练数据中输入变量数量的技术。
在处理高维数据时,通过将数据投影到捕获数据“本质”的低维子空间来降低维度通常很有用。这被称为降维。
— 第 11 页,《机器学习:概率视角》,2012 年。
高维可能意味着数百、数千甚至数百万个输入变量。
更少的输入维度通常意味着机器学习模型中相应更少的参数或更简单的结构,这被称为自由度。自由度过多的模型很可能会过拟合训练数据集,因此在新数据上可能表现不佳。
我们希望模型简单且泛化能力强,同时输入数据具有较少的输入变量。对于线性模型尤其如此,其中输入数量和模型的自由度通常密切相关。
维度诅咒的根本原因在于,高维函数可能比低维函数复杂得多,而且这些复杂性更难辨别。克服诅咒的唯一方法是融入关于数据的正确知识。
— 摘自《模式分类》,2000年,第15页。
降维是一种在建模前对数据进行的数据准备技术。它可能在数据清理和数据缩放之后,以及在训练预测模型之前执行。
……降维可以得到一个更紧凑、更容易解释的目标概念表示,将用户的注意力集中在最相关的变量上。
— 摘自《数据挖掘:实用机器学习工具和技术》,第4版,2016年,第289页。
因此,对训练数据进行的任何降维也必须应用于新数据,例如测试数据集、验证数据集,以及使用最终模型进行预测时的数据。
降维技术
有许多技术可用于降维。
在本节中,我们将回顾主要技术。
特征选择方法
也许最常见的是所谓的特征选择技术,它们使用评分或统计方法来选择要保留哪些特征以及要删除哪些特征。
……执行特征选择,以移除对分类问题帮助不大的“不相关”特征。
— 摘自《机器学习:概率视角》,2012年,第86页。
特征选择技术的两个主要类别包括封装方法和过滤方法。
有关特征选择的更多信息,请参阅教程。
封装方法,顾名思义,封装了一个机器学习模型,通过不同子集的输入特征拟合和评估模型,并选择能带来最佳模型性能的子集。RFE(递归特征消除)是封装特征选择方法的一个例子。
过滤方法使用评分方法,如特征与目标变量之间的相关性,来选择最具有预测性的输入特征子集。示例包括皮尔逊相关系数和卡方检验。
有关基于过滤的特征选择方法的更多信息,请参阅教程。
矩阵分解
线性代数中的技术可用于降维。
具体来说,矩阵分解方法可用于将数据集矩阵分解为其组成部分。
示例包括特征分解和奇异值分解。
有关矩阵分解的更多信息,请参阅教程。
然后可以对这些部分进行排序,并选择其中一部分,以最好地捕捉矩阵的显著结构,从而用于表示数据集。
对分量进行排序的最常用方法是主成分分析,简称PCA。
最常用的降维方法称为主成分分析或PCA。
— 第 11 页,《机器学习:概率视角》,2012 年。
有关PCA的更多信息,请参阅教程。
流形学习
高维统计中的技术也可用于降维。
在数学中,投影是一种以某种方式转换数据的函数或映射。
— 摘自《数据挖掘:实用机器学习工具和技术》,第4版,2016年,第304页。
这些技术有时被称为“流形学习”,用于创建高维数据的低维投影,通常用于数据可视化目的。
投影旨在创建数据集的低维表示,同时最好地保留数据中显著的结构或关系。
流形学习技术的例子包括:
- Kohonen自组织映射(SOM).
- Sammons映射
- 多维尺度变换(MDS)
- t-分布随机邻域嵌入(t-SNE)。
投影中的特征与原始列通常关系不大,例如它们没有列名,这可能会让初学者感到困惑。
自编码器方法
深度学习神经网络可以被构建用于执行降维。
一种流行的方法叫做自编码器。这涉及到构建一个自监督学习问题,模型必须正确地重现输入。
有关自监督学习的更多信息,请参阅教程。
使用一个网络模型,该模型试图将数据流压缩到瓶颈层,该层的维度远小于原始输入数据。模型中在瓶颈层之前和包括瓶颈层在内的部分被称为编码器,而读取瓶颈输出并重建输入的部分被称为解码器。
自编码器是一种无监督神经网络,用于降维和特征发现。更确切地说,自编码器是一种前馈神经网络,经过训练以预测输入本身。
— 摘自《机器学习:概率视角》,2012年,第1000页。
训练后,解码器被丢弃,瓶颈的输出直接用作输入的降维。经过此编码器转换的输入可以再输入到另一个模型,不一定是神经网络模型。
深度自编码器是非线性降维的有效框架。一旦构建了这样的网络,编码器最顶层的层,即代码层hc,就可以作为输入用于监督分类过程。
— 摘自《数据挖掘:实用机器学习工具和技术》,第4版,2016年,第448页。
编码器的输出是一种投影类型,与其他投影方法一样,瓶颈输出与原始输入变量之间没有直接关系,这使得它们难以解释。
有关自编码器的示例,请参阅教程。
降维技巧
没有最好的降维技术,也没有技术与问题之间的映射关系。
相反,最好的方法是使用系统性的受控实验来发现哪些降维技术与您选择的模型结合使用时,能在您的数据集上产生最佳性能。
通常,线性代数和流形学习方法假定所有输入特征具有相同的尺度或分布。这表明,如果输入变量具有不同的尺度或单位,那么在使用这些方法之前对数据进行归一化或标准化是一种良好的实践。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
教程
书籍
- 机器学习:概率视角, 2012.
- 《数据挖掘:实用机器学习工具和技术》,第 4 版,2016 年。
- 模式分类, 2000.
API
文章
总结
在这篇文章中,您了解了机器学习降维的简要介绍。
具体来说,你学到了:
- 大量的输入特征可能导致机器学习算法性能不佳。
- 降维是一个通用的研究领域,旨在减少输入特征的数量。
- 降维方法包括特征选择、线性代数方法、投影方法和自编码器。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
我有一个关于“降维”术语的问题。
假设我有一张包含n个特征向量且每个特征向量有m个特征的数字发票。
如果我想减少m的数量,例如我想“压缩”属于同一张发票的所有特征向量,该怎么办?
正确的做法是什么?我可以尝试主成分分析或非负矩阵分解吗?还是我完全误解了“维度”这个词?
此致
Dominic
您的理解是正确的,我们减少“特征”的数量,通常是数据表中的列。
在您的情况下,您可能需要使用另一种方法——我不确定PCA是否直接适用。我可能错了。也许某种自编码器会更好。
好的,我明白了——谢谢您的信息!
已经试了3次,还没收到您的速成班邮件,真令人失望。
抱歉,本周发生了大规模的谷歌/电子邮件中断,我也受到了影响。
现在应该已经恢复正常了。
如果您有任何问题,请随时直接联系我。
https://machinelearning.org.cn/contact/
我也有一个问题,
想象一个包含大量变量的数据集。是否有可能只对部分数据而不是整个数据集执行降维?
这个问题只是想知道这在数学上是否有意义。
当然,您可以选择一个数据子集来应用该方法。
Jason您好,我有一个关于降维和卷积神经网络的问题。
我看到降维在“经典”机器学习中经常能得到很好的结果。但是,我还没有找到降维用于卷积神经网络输入的例子。
有没有降维能给CNN带来优势的案例?如果没有,原因是什么?
非常感谢您的回复
像CNN这样的模型会执行它们自己的自动特征提取过程。
Jason您好,感谢您的文章。
我正在研究一个预测某类产品需求的模型。
每个组包含不同SKU和不同价格,目前我们一直使用平均值或加权平均值将所有价格汇总在一起。
然而,阅读您的文章后,我开始思考对价格进行降维。
您认为这种方法有什么潜在问题吗?
先谢谢您了。
我建议收集以前按销售数量划分的销售数据。然后使用PCA等方法来寻找隐藏的类别。在经济学中,有互补品和替代品。识别这些关系可能会有所帮助。