机器学习:降维技术完整指南
第1章:降维简介:
什么是降维?
在统计学、机器学习和信息论中,降维是将n维降为k维的过程,其中k<n。
数据降维
数据可视化:
一维数据:
在这里,我们经常把维度称为特征。例如,我们用一个一维数组开始绘制数轴上的值。
二维数据:
现在,我们有一个二维数组,并开始在彼此正交的X和Y轴上绘制数据。
三维数据:
现在,我们将使用3D数组,并在X,Y和Z轴上进行绘制。
我们可以看到,随着维度的增加,对我们而言,数据的可视化变得越来越困难。
n维数据:
对于N- d数据,我们需要N个维度,无法再对其进行可视化。因此,为了可视化3D以上的任何数据,我们将使用降维技术将其降为2维或3维。
降维的本质:
在高维数据的微观层次上分析每一个维度是不可能的。我们可能需要几天或几个月的时间来进行有意义的分析,这些分析需要大量的时间、金钱和人力。训练一个高维的数据会给我们带来如下问题:
- 存储数据所需的空间随着维度的增加而增加。
- 维度越小,训练机器学习模型所需的时间就越少。
- 随着维度的增加,过度拟合机器学习模型的可能性也会增加。
- 我们无法可视化高维数据。通过降维,我们会将数据缩减为2D或3D,以实现更好的可视化。
- 它将删除我们数据中的所有相关特征。
降维的组成部分:
降维有两个主要的组成部分,我们将在这里详细讨论
1)特征选择:
大多数情况下,这些特征与我们的问题无关。例如,我们正在训练一个预测人身高的机器学习模型,我们拥有特征(体重,肤色,痣,婚姻状况,性别)的数据。我们可以看到肤色、痣和婚姻状况等特征与人的身高没有关系。因此,我们需要找到一种解决方案,以找到对我们的任务最有用的特征。我们可以通过以下方式实现:
- 业务理解、领域知识和专家解决方案可以帮助我们选择影响响应变量(目标)的预测变量(特征)。但是,如果我们找不到有用的预测变量,或者我们错过了有用的特征,它们就有可能丢失信息。
- 我们建立了一个经典的机器学习模型,并根据与目标变量的相关性来选择特征。与拟合度低的特征相比,拟合度高的特征更容易被选择。
- 减少特征也可以帮助我们解决此问题。
- 另一种方法是删除所有相关的特征。例如,如果我们有与其他特征(f1=2f2+3f3)的线性组合的特征,那么它们将不会向我们的数据添加任何额外的信息。因此,这些特征对我们的机器学习模型训练不再有用。
特征选择涉及到寻找原始数据的子集,使它们的信息损失最小。它有以下三种策略:
- Filter策略:获取更多数据信息的策略。
- Wrapper策略:根据模型的准确度选择特征
- Embedded策略:根据模型预测误差,我们将决定是否保留或删除所选择的特征。
2)特征投影:
特征投影又称特征提取,是将高维空间中的数据转换为低维空间中的数据。数据转换可以是线性的,也可以是非线性的。
对于线性变换,我们应用主成分分析(PCA)和线性判别分析(LDA);对于非线性变换,我们应用T-SNE。
第2章:主成分分析
1、PCA介绍
PCA主要用作探索性数据分析(EDA)中的工具和用于建立预测模型的工具。它通常用于可视化群体之间的遗传距离和相关性。PCA可以通过数据协方差(或相关)矩阵的特征值分解或数据矩阵的奇异值分解来完成。
2、PCA的工作方法:
为了更好地理解PCA的原理,让我们使用2D数据。
- 首先我们对数据进行归一化处理,使平均值移动到原点,所有数据都在一个单位正方形中。
- 现在我们将试着用一条线来拟合数据。为此,我们将尝试用一条随机的线。现在我们将旋转这条直线,直到它最适合数据为止。
最终,我们得到了下面的拟合(高度拟合),它解释了特征的最大方差。
最佳拟合线
PCA如何找到最佳拟合线的呢?
让我们从一个点开始。
为了确定直线与数据的匹配程度,PCA将数据投射到它上。
i)可以测量从数据到直线的距离,并试图找到一条最小化这些距离的直线。
ii)或者可以试着找到一条直线,使投影点到原点的距离最大化。
数学直觉:
为了理解这种技术背后的数学原理,让我们回到我们的单数据点概念。
将数据投影到线上之后,我们将得到一个直角三角形。根据毕达哥拉斯定理,我们得到A²=B²+C²。
我们可以看到B和C彼此成反比。这意味着如果B变大,则c必须变小,反之亦然。
因此PCA既可以最小化到直线的距离,也可以最大化从投影点到原点的距离。
从投影点到原点的最大距离更容易计算。因此,PCA会找到最佳拟合线,以使从投影点到原点的距离平方的总和最大。
距离平方和的最大值
pca的成本函数
注意:这里我们采用距离的平方,以便负值不会抵消正值。
现在我们得到了最佳拟合线y = mx + c。这称为PC1(主成分1)。假设比例为4:1,这意味着我们在X轴上移动4个单位,在Y轴上移动1个单位,这说明数据大部分分布在X轴上。
根据毕达哥拉斯定理,a²=b²+c²=>a²=4²+1²=> sqrt(17)=> 4.12,但是数据是按比例缩放的,因此我们将每一边除以4.12,以获得单位向量。即
F1 = 4 / 4.12 = 0.97
F2 = 1 / 4.12 = 0.242
我们刚刚计算的单位向量称为特征向量或PC1,特征的比例(0.97:0.242)称为loading scores。
SS(PC1的距离)= PC1的特征值。
sqrt(PC1的特征值)= PC1的奇异值。
现在我们对其他特征做同样的事情来得到主成分。为了投影数据,现在我们将旋转轴,使PC1与x轴平行(水平)。
旋转轴,使PC1变为水平
根据主成分投影数据
我们可以使用在PCA中计算的特征值来计算方差。
假设我们得到方差:PC1 = 0.83和PC2 = 0.17
现在,如果要将数据从2D转换为1D,我们选择feature1作为最终的1D,因为它覆盖了83%。
这就是主成分分析的工作原理,它根据主成分的方差估计需要消除的特征,从而进行降维。
3、优点和缺点:
优点 :
- 它删除了相关特征。
- 提高了模型效率。
- 减少过度拟合。
- 改善可视化效果。
缺点:
- PCA是一种线性算法,对于多项式或其他复杂函数来说效果不佳。我们可以找到一些如何使用核PCA来处理此类数据的方法。
- 在PCA之后,如果我们不选择正确的维数来消除,我们可能会丢失很多信息。
- 由于原始特征转换为不像原始特征那样可读的主成分,因此可解释性较低。
- 它保留全局形状而不是局部形状。
4、通过python代码段在MNIST数据集上进行PCA:
可以从kaggle 下载data(train.csv)(https://www.kaggle.com/c/digit-recognizer/data)
加载mnist数据
mnist图像的维度表示
作为预处理步骤,我们对数据进行标准化处理,以使平均值移至原点,并且所有数据均位于单位正方形中。
PCA有两种应用方式,一种是寻找特征向量,另一种是使用sklearn实现。在大多数情况下,这两种实现都会得到类似的结果。
方法1:
我们将得到协方差矩阵,该协方差矩阵用于求特征值和特征向量。
在将数据转换为二维之后,我们将使用这两个特征来实现数据的可视化。
利用特征向量进行主成分分析
方法:2
我们将使用sklearn的PCA实现。
PCA的Sklearn实现
通过sklearn进行主成分分析
让我们看看每个特征解释的方差百分比。
由每个特征解释的方差百分比
如果我想保留80%的数据信息,那么我可以将维度减少到110。
第3章:线性判别分析(LDA):
1、简介:
LDA是器学习和统计、模式识别中预处理步骤中最常用的降维技术。 此算法的目标是将数据集投影到具有类别可分的低维空间,以避免过度拟合并降低机器计算量。
2、LDA的工作方式:
PCA和LDA都是线性约简技术,但与PCA不同的是,LDA侧重于最大化两个组的可分性。
LDA使用特征来创建一个新轴,并尝试将数据投射到一个新轴上,以最大限度地分离两个类。这就是为什么LDA是一种监督学习算法,因为它利用目标值来寻找新的轴。
PCA试图找到方差最大的成分,而LDA则试图找到新的轴
i)最大化类的可分离性
ii)最小化类之间的方差。
通过最小化方差,我们可以很好地分离各个组的聚类。 与最大化组的平均值一样重要。
LDA根据最大化下列公式的准则找到新的坐标轴
LDA的成本函数
2个类以上的LDA:
在这种情况下,如果数据有2个以上的组,LDA会找出整个数据的平均值和各个组之间的中心,它试图最大化从中心平均值到各个组平均值的距离。为了更好地理解,请看以下3个类的数据。
我们可以找到一个能将这三组分开的平面。
算法:
- 计算数据集中不同类别的d维平均向量。
- 计算散点矩阵(类间和类内散点矩阵)。
- 计算散点矩阵的特征向量(e1,e2,…,ed)和相应的特征值(λ1,λ2,…,λd)。
- 通过减少特征值对特征向量进行排序,并选择特征值最大的k个特征向量以形成ad×k维矩阵W(其中每列代表一个特征向量)。
- 使用此d×k特征向量矩阵将样本转换到新的子空间上。Y = X×W(其中X是代表n个样本的x维矩阵,y是新子空间中变换后的n×k维样本)。
3、LDA的扩展
当分布的平均值是共享的(具有高方差的组)时,线性判别分析会失败,因为LDA不可能找到使两个类线性分离的新轴。当数据不是线性可分的时候,LDA也会失败。在这种情况下,我们可以使用非线性判别分析。
- QDA:每个类都使用自己的方差估计值(如果有多个输入变量,则为协方差)。
- FDA:使用输入的非线性组合(例如样条曲线)。
- RDA:将正则化引入方差(实际上是协方差)的估计中,以缓和不同变量对LDA的影响。
4、在IRIS数据集上LDA的Python Sklearn实现
让我们使用IRIS数据集
像PCA一样,LDA也可以使用sklearn实现。使用LDA,我们已将数据从4维减少到2维。
为了了解PCA和LDA工作的区别,让我们看看下面的图。PCA试图使方差最大化,而LDA则试图使三个类别的可分离性最大化。
在PCA中,他们的数据有一些重叠,很难找到一条线把两组分开。LDA可以帮助我们将这三个组分开,因为他们的数据重叠较少。
第4章:T-SNE
1、T-SNE简介:
T-SNE是Laurens van der Maaten和Geoffrey Hinton(深度学习之父)开发的一种经常用于可视化的机器学习算法。它是一种非线性降维技术,非常适合在二维或三维的低维空间中嵌入高维数据进行可视化。它以二维或三维点对每个高维对象进行建模,使得相似的对象由附近的点建模,而不相似的对象则由远处的点建模。
T-SNE被广泛应用于可视化领域,包括计算机安全研究、音乐分析、癌症研究、生物信息学和生物医学信号处理。它经常被用于可视化高级表示的人工神经网络学习。
2、工作方式
在进行数学直觉之前,让我们学习T-SNE涉及的一些术语。
邻域:点的邻域定义为几何上相互接近的点的聚类。
嵌入:嵌入是通过创建xi¹将高维空间中的点投影到低维空间中的过程。
随机:
首先,T-SNE以这样的方式在几对高维对象上构建概率分布,即相似的对象被拾取的可能性很高,而相异的点被拾取的可能性非常小。这就是为什么将T-SNE称为随机(概率)的原因。
T-SNE构造了多对高维对象的概率分布,使得相似的对象被选中的概率很高,而不相似的点被选中的概率极小。这就是为什么T-SNE被称为随机(概率)。
T-SNE定义了在低维图中的点上的相似概率分布,相对于图中点的位置,它使两个分布之间的Kullback-Leibler散度(KL散度)最小化。请注意,虽然原始算法使用对象之间的欧氏距离作为其相似度度量的基础,但这应该根据需要进行更改。
T-SNE的成本函数是
3、处理拥挤问题:
拥挤是指我们在较小的空间中尝试项目点的情况,由于空间不足,所有内容都变得混乱。
T分布:
高斯分布
通过使用高斯分布,所有低相似度值都落在曲线的尾部区域,我们可以看到尾部的空间很小,不像曲线两端的T分布那么高。最终,低相似度值与不同聚类的其他低相似度值混合在一起。为了克服这个问题,传统的SNE算法被T-SNE代替,其中T表示T分布。
高斯分布与T分布
4、优点和缺点:
优点:
- 与PCA不同,T-SNE是一种非线性约简技术,这意味着它可以很好地处理任何多项式或非线性数据。
- T-SNE能够保留局部和全局结构,而PCA则尝试将高维投影到低维,以解释数据中的大部分方差。因此,它只关心全局结构。
- T-SNE被广泛用于可视化任务。
缺点:
- T-SNE具有二次时间和空间复杂度。
- 在处理大型机器学习数据集时,不建议使用T-SNE。
- T-SNE是一种非参数映射方法,这意味着它没有将给定点映射到低维空间的显式函数。T-SNE根据该点的邻域将该点嵌入到低维中。因此,当一个测试数据点出现时,由于之前没有出现,我们需要再次训练整个T-SNE算法进行嵌入,由于它的二次时间复杂度,这种方法很少被使用。
Barnes-Hut SNE (BHTSNE)
这项技术是在2014年引入的,与T-SNE非常相似,但是有一些细微的变化。该算法利用了天文学家常用的Barnes-Hut算法进行N body模拟来近似对应点间的力。
与标准T-SNE(O(N log N))相比,这些算法带来了实质性的计算优势,远优于二次时间复杂度。可以使用sklearn manifold.TSNE库轻松地实现,方法是使用method ='barnes-hut'属性。
5、通过python代码段在MNIST数据集上进行T-SNE:
我们已经看到了PCA在MNIST上的工作方式。现在,让我们尝试使用相同的数据集进行T-SNE。与PCA不同,T-SNE具有两个参数:Perplexity和n_iter。我们将尝试使用这些参数的不同值来拟合数据。
使用perplexity = 30,n_iter = 1000
使用perplexity =50,n_iter = 1000
使用perplexity = 2,n_iter = 1000
我们可以看到perplexity降低后,数据会与所有聚类混合。因此,选择正确的参数值始终很重要。
使用perplexity = 100,n_iter = 1000
perplexity= 100在我们的数据上运行良好。但是请注意,我们只在5000个数据点上尝试了T-SNE,因为它的时间复杂性,这会花费大量时间。
第5章:数据归一化:
通过数据归一化,我们可以将数据从无限范围转换为范围的有限集。
降维之前需要数据归一化:
假设有两个特征,其中一个特征的值范围是1到10(市场每小时的购买者数量),而另一个特征的值范围是50到1000(市场的访问者数量)。可能每小时的访客数是>>每小时的买家数。
因为像PCA这样的技术是基于方差最大化的,如果我们在使用PCA寻找特征向量之前不进行归一化,他们会更关注大值维度,特征向量不会捕捉其他维度中的信息。
因此,特征归一化用于摆脱公斤,厘米,毫米,升等刻度。在归一化后,我们将所有数据绘制在一个单位正方形内。
数据归一化技术:
数据可以通过多种方式进行转换。一些最常用的技术是:
- Linear Scaling或者min-max Scaler:
X =数据点
Xmin =最小数据点
Xmax =最大数据点
当我们知道数据的近似上界和下界很少或没有离群值值时,我们将使用这种技术。当我们知道我们的数据在整个范围内大致均匀分布时也使用此技术。缩放后,所有值将位于[0,1]范围内。
2.Feature Clipping
当数据包含极端异常值时,这些技术将某个值之上或之下的特征值限制为一个固定值。例如,将高度超过120cm的所有值裁剪为正好120cm。这意味着我们将这些值压缩到一个固定的范围。
3.Log Scaling:
当数据的分布遵循幂律或是帕雷托分布时,即一个值有很多点而其他值很少时,使用它。
4. Z分数或标准化:
标准化后,均值将转换为0,标准差将转换为1。当离群值很少时(不是极端到需要剪裁),它是很有用的。
最后
处理成千上万的特征是任何数据科学家必备的技能。我们每天生成的数据量是空前的,我们需要找到不同的方法来弄清楚如何使用它们。