降维算法之弄清原因:数据挖掘or图像处理,我们为啥要进行特征工程and降维?

想象这样一种场景:我们正通过电视而非现场观看体育比赛,在电视的纯平显示器上有一个球。显示器大概包含了100万像素,而球则可能是由较少的像素组成的,比如说一千个像素。在大部分体育比赛中,我们关注的是给定时刻球的位置。人的大脑要想了解比赛的进展,就需要了解球在运动场中的位置。对于人来说,这一切显得十分自然,甚至都不需要做任何思考。在这个场景当中,人们实时地将显示器上的百万像素转换成为了一个三维图像,该图像就给出了运动场上球的位置。在这个过程中,人们已经将数据从一百万维降至了三维。

在上述体育比赛的例子中,人们面对的原本是百万像素的数据,但是只有球的三维位置才最重要,这就被称为降维(dimensionality reduction)。刚才我们将超百万的数据值降到了只有三个相关值。在低维下,数据更容易进行处理。另外,其相关特征可能在数据中明确地显示出来。通常而言,我们在应用其他机器学习算法之前,必须先识别出其相关特征。

由于许多机器学习问题涉及每个训练实例的成千上万甚至数百万个特征。正如我们将看到的那样,所有这些特征不仅使训练变得极其缓慢,而且还会使找到好的解决方案变得更加困难。幸运的是降维可以大大减少特征的数量,例如MNIST图像边界上的像素几乎都是白色,因此你可以从训练集中完全删除这些像素而不会丢失太多信息。这些像素对于分类而言完全不重要。另外,两个相邻的像素通常是高度相关的,如果将它们合并为一个像素(例如,通过取两个像素的平均值),不会丢失太多信息。

本文总体结构如下,可以根据下面的目录快速跳转到想了解的部分。本文论述重点在于降维

目录

一、自建数据集,有什么问题?

二、数据预处理和特征工程

三、从两种不同的视角看降维

3.1 什么叫做“维度”?

3.2. 从数据分析-特征工程的角度

3.3 从机器学习的角度

 四、几种主要的降维算法及其在sklearn中的表示

 五、总结

六、关于降维及算法的常见面试题


一、自建数据集,有什么问题?

在学习机器学习与数据挖掘的过程中,我们经常会使用到各种各样的数据集——例如对于分类模型,我们会使用到泰坦尼克号数据集;对于回归模型,我们会使用到波士顿房价数据集。在计算机视觉领域,我们常常使用到MNIST、Fashion-MNIST、CLFAR-10数据集等。

实际上,上述数据集都是经过层层筛选、经过预处理之后的理想数据集,这些数据集运行时间短、预测效果好、没有严重缺失等问题。因此这些理想的数据集非常适用于初学者在理想状态下快速地掌握一些算法。

然而,在实际应用中,使用我们自建的数据集调模型时,就不一定能产生那么好的效果了。可能面对的问题有:

  • 数据类型不同:有的是str,有的是num,有的含时间序列,有的连续,有的间断。
  • 数据质量不行:有噪声、有异常、量纲不一、有重复、数据量太大或太小等。

因此,这些带有“问题”的数据到了现实应用中,就会发现模型“调不动了”,因为这些数据并不能够很好地适应模型、匹配模型的需求。

因此在数据挖掘中,我们总共会经过:获取数据、数据预处理、特征工程、建模、验证模型效果的过程。在后文中,我们先对数据预处理和特征工程做简单介绍,之后着重介绍降维算法。

二、数据预处理和特征工程

数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程。它的目的在于让数据适应模型,匹配模型的需求。数据预处理存在于sklearn.preprocessing和sklearn.feature extraction 模块中。包括标准化、归一化、缺失值处理、分类数据编码、二值化等功能。

特征工程是将原始数据转换为更能代表预测模型的潜在问题的特征的过程,最终目的为:

  • 降低计算成本,尤其是减小计算时所需要的时间开销
  • 提升模型上限

在进行特征工程之前,有一个非常重要的步骤:和数据提供者开会!尽管你的技术能够让模型起飞,但前提是你和那些业务人员一样了解数据,尤其是那些理解业务和数据含义的人。因此特征工程的第一步,是根据我们的目标,用业务常识来判断特征。

特征工程可能面对的问题有:特征之间有相关性,特征和标签无关,特征太多或太小,或者干脆就无法表现出应有的数据现象或无法展示数据的真实面貌 。

可以通过挑选最相关的特征,提取特征以及创造特征来实现。特征工程的三种表现形式如下表所示:

特征工程的三种表现形式

特征提取

(feature extraction)

特征创造

(feature creation)

特征选择

(feature selection)

通过从原始数据中提取有意义的特征来创建新的表示形式。这包括使用数学变换、统计方法、信号处理等技术从原始数据中提取最相关和最有信息量的特征。比如说,从淘宝宝贝的名称中提取出 产品类别,产品颜色,是否是网红产品等等。通过基于原始特征创建新的特征来增强模型的表达能力。这可能包括使用数学运算、组合特征、提取统计特征、时间序列特征提取等。比如说,我们有一列特征是速度,一列特征是距离,我们就可以通过让两列相除,创造新的特征:通过距离所花的时间。通过选择最相关和最具有预测能力的特征,减少特征空间的维度,提高模型的泛化能力。特征选择可以通过方差阈值、相关性分析、特征重要性排序等方法来实现。从所有的特征中,选择出有意义,对模型有帮助的特征,以避免必须将所有特征都导入模型去训练的情况。

常见的特征提取(Feature extraction)方法包括对原始数据进行变换、降维或组合等方式,从原始数据中获得最有意义的特征表示。降维方式包括主成分分析(PCA)、线性判别分析(LDA)等;变换方式包括小波变换(Wavelet Transform)等;组合方式则是将原始特征进行组合生成新的特征,可通过数学运算、特征交叉或特征转换等方式进行。例如,对于图像识别任务,可以计算图像的纹理特征、颜色特征和形状特征,并将它们组合成一个更丰富的特征向量。

特征创造(Feature Creation)是指根据领域知识或经验构造新的特征,以更好地表达问题的特点。例如,对于图像识别任务,可以通过计算图像的纹理特征、颜色特征等来丰富原始图像的特征表示。

特征选择(Feature Selection)是从已有特征集合中选择最有用或最相关的特征子集,以提高机器学习算法的性能或减少计算开销。嵌入法、包装法和过滤法都属于特征选择方法。

三、从两种不同的视角看降维

3.1 什么叫做“维度”?

对于数据表(DataFrame)而言,维度指的是样本什么价的数量或特征的数量,一般无特别说明,维度指的都是特征的数量。除了索引之外,一个特征是一维,两个特征是二维,n个特征是n维。

 对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴,一个特征向量定义一条直线,是一维,两个相互垂直的特征向量定义一个平面,即一个直角坐标系,就是二维,三个相互垂直的特征向量定义一个空间,即一个立体直角坐标系,就是三维。三个以上的特征向量相互垂直,定义人眼无法看见,也无法想象的高维空间。

 对于三维以上的数据,由于不能被可视化,因此数据的性质就难以被理解。所以可以考虑将高维数据降到三维及以下,从而帮助我们尽快理解数据的分布。

3.2. 从数据分析-特征工程的角度

特征工程的角度看,降维属于特征提取的子任务,它旨在通过选择最相关的特征和减少特征的维度来简化数据表示和计算,并且通常会保留数据的主要结构和信息,便于对数据进行更高效和紧凑的表示,从而改善模型性能和泛化能力。降维的最终目的和特征工程有相通之处,主要在以下三点:

  • 从提升计算效率考虑:降维可以将高维数据压缩到更低维度,这样就减少了存储需求,节约资源和成本,减少特征数量,从而加快模型训练和预测速度,提高计算效率。
  • 从信息重要性考虑:降维可以去除特征中冗余信息,通过选择最相关和最具预测能力的特征,减少数据中的噪声和无关变量,从而提高模型的鲁棒性和泛化能力。
  • 从可视化及解释性考虑:降维可以将高维数据映射到低维空间,使数据更容易可视化和理解。通过可视化降维后的数据,可以发现数据中的模式和结构,以及数据点之间的关系。但值得注意的一点是:降维的算法只负责减少维数,新产生特征的意义就必须由我们自己去发现了。

3.3 从机器学习的角度

从机器学习的角度看,降维属于无监督学习的一种方法,可以用于监督学习的前处理。所谓无监督学习,是指从无标注数据中学习预测模型的机器学习问题,预测模型表示数据的类别、转换或者概率。无监督学习的本质是学习数据中的统计规律或者潜在结构。因此降维就是将数据中最主要的结构和信息自动地“学习”了出来,帮助发现高维数据中的统计规律。

举个栗子,假使我们有许多不同国家的数据,每一个特征向量都有 50 个特征(如 GDP,人 均 GDP,平均寿命等)。如果要将这个 50 维的数据可视化是不可能的。使用降维的方法将 其降至 2 维,我们便可以将其可视化了。

 

 四、几种主要的降维算法及其在sklearn中的表示

降维方法包括主成分分析(PCA)、线性判别分析(LDA)、局部线性嵌入(LLE)、非负矩阵分解(NMF)、t-分布随机近邻嵌入(t-SNE)等,如下图所示。

这些方法都属于特征提取的范畴,可以减少特征的数量,并提取具有最大方差最大类别区分性能的特征,因为它们能够保留数据中最重要的信息,同时减少特征的维度。这样可以降低计算复杂度,消除冗余信息,并提高模型的性能和泛化能力。

  • 具有最大方差的特征表示在数据中具有最大的变化程度。通过选择这些具有最大方差的特征,我们可以保留数据中最具有信息量的部分。
  • 具有最大类别区分性能的特征表示在不同类别之间具有最大的差异。这意味着这些特征能够有效地区分不同类别的样本,使得分类任务更加准确和可靠。

sklearn中的降维算法都被包括在模块decomposition中,本质上是一个矩阵分解模块,在sklearn官方文档中,decomposition模块的大标题是“Decomposing signals in components (matrix factorization problems)”,译为“分解信号的成分(矩阵因子化问题)”,因此降维本质上和矩阵的特征值、特征向量有着密切的关系。在此模块中,一些降维算法的类和说明如下表所示:

 五、总结

本文主要目的在于明确使用降维算法的原因以及简要了解主要降维算法及其在sklearn中的表现形式。从真实数据本身存在的问题出发,说明了在正式进行模型训练之前,进行数据预处理和特征工程的重要性。重点论述了作为特征提取子任务之一的降维方法:从数据分析的角度,降维能够保留数据的主要结构和信息,便于提升计算效率和可视化;从机器学习的角度,降维属于无监督学习的一种方法,可以用于监督学习的前处理。最后,简单列举了几种主要的降维算法,以及sklearn.decomposition模块中降维的方法。

六、关于降维及算法的常见面试题

1.减少数据集维度的主要动机是什么?主要缺点是什么?

降维的主要动机是:·为了加速后续的训练算法(在某些情况下,也可能为了消除噪声和冗余特征,使训练算法性能更好)。·为了将数据可视化,并从中获得洞见,了解最重要的特征。·为了节省空间(压缩)。主要的弊端是:·丢失部分信息,可能使后续训练算法的性能降低。·可能是计算密集型的。·为机器学习流水线增添了些许复杂度。·转换后的特征往往难以解释。

2.维度的诅咒是什么?

维度的诅咒是指许多在低维空间中不存在的问题,在高维空间中发生。在机器学习领域,一个常见的现象是随机抽样的高维向量通常非常稀疏,提升了过拟合的风险,同时也使得在没有充足训练数据的情况下,要识别数据中的模式非常困难。

3.一旦降低了数据集的维度,是否可以逆操作?如果可以,怎么做?如果不能,为什么?

一旦使用我们讨论的任意算法减少了数据集的维度,就几乎不可能再将操作完美地逆转,因为在降维过程中必然丢失了一部分信息。此外,虽然有一些算法(例如PCA)拥有简单的逆转换过程,可以重建出与原始数据集相似的数据集,但是也有一些算法不能实现逆转(例如T-SNE)。

4.可以使用PCA来减少高度非线性的数据集的维度吗?

对大多数数据集来说,PCA可以用来进行显著降维,即便是高度非线性的数据集,因为它至少可以消除无用的维度。但是如果不存在无用的维度(例如瑞士卷),那么使用PCA降维将会损失太多信息。你你希望的是将瑞士卷展开,而不是将其压扁。

5.假设你在1000维的数据集上执行PCA,将可解释方差比设置为95%。结果数据集将具有多少个维度?

这是个不好回答的问题,它取决于数据集。我们来看看两个极端的示例。首先,假设数据集是由几乎完全对齐的点组成的,在这种情况下,PCA可以将数据集降至一维,同时保留95%的方差。现在,试想数据集由完全随机的点组成,分散在1000个维度上,在这种情况下,需要在950个维度上保留95%的方差。所以,这个问题的答案是:取决于数据集,它可能是1到950之间的任何数字。将解释方差绘制成关于维度数量的函数,可以对数据集的内在维度获得一个粗略的概念。

6.在什么情况下,你将使用常规PCA、增量PCA、随机PCA或内核PCA?

常规PCA是默认选择,但是它仅适用于内存足够处理训练集的时候。增量PCA对于内存无法支持的大型数据集非常有用,但是它比常规PCA要慢一些,所以如果内存能够支持,还是应该使用常规PCA。当你需要随时应用PCA来处理每次新增的实例时,增量PCA对于在线任务同样有用。当你想大大降低维度数量,并且内存能够支持数据集时,使用随机PCA非常有效,它比常规PCA快得多。最后,对于非线性数据集,使用核化PCA非常有效。

7.如何评估数据集中的降维算法的性能?

直观来说,如果降维算法能够消除许多维度并且不会丢失太多信息,那么这就算一个好的降维算法。进行衡量的方法之一是应用逆转换然后测量重建误差。然而并不是所有的降维算法都提供了逆转换。还有另一种选择,如果你将降维当作一个预处理过程,用在其他机器学习算法(比如随机森林分类器)之前,那么可以通过简单测量第二个算法的性能来进行评估。如果降维过程没有损失太多信息,那么第二个算法的性能应该跟使用原始数据集一样好。

8.链接两个不同的降维算法是否有意义?

链接两个不同的降维算法绝对是有意义的。常见的示例是使用PCA快速去除大量无用的维度,然后应用另一种更慢的降维算法,如LLE。这种两步走的策略产生的结果可能与仅使用LLE相同,但是时间要短得多。

9.为什么说SVD和PCA实现了降维,在计算过程中并没有发生数据减少呀?

SVD和PCA算法本身并不会实现降维,但是进行矩阵特征分解后,截断了一部分重要的信息而选择保留另一部分重要的信息,从而实现了降维。

10.PCA的最小平均误差理论和线性回归最小二乘法非常类似,那么它们之间有什么异同?

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值