常用降维方法之PCA 和 LDA

常用降维方法之PCA 和 LDA,第1张

PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。而方差最大的那个维度是主成分。

PCA是比较常见的线性降维方法,通过线性投影将高维数据映射到低维数据中,所期望的是在投影的维度上,新特信烂征自身的方差尽量大,方差越大特征越有效,尽量使产生的新特征间的相关性越小。

PCA算法的具体 *** 作为对所有的样本进行中心化 *** 作,计算样本的协方差矩阵,然后对协方差矩阵做特征值分解,取最大的n个特征值对应的特征向量构造投影矩阵。

再举个栗子:

下面举一个简单的例子,说明PCA的过程。

假设我们的数据集有10个二维数据(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1维特征。

首先我们对样本中心化,这里样本的均值为(1.81, 1.91),所有的样本减去这个均值向量后,即中心化后的数据集为(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。

现在我们开始求样本的协方差矩阵,由于我们是二维的,则协方差矩阵为:

对于我们的数据,求出协方差矩阵为:

 求出特征值为(0.0490833989, 1.28402771),对应的特征向量分别为:

由于最大的k=1个特征值为1.28402771,对于的k=1个特征向量为 则我们的W=

我们对所有的数据集进行投影 得到PCA降维后的10个一维数据集为:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)

在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n', 这里的维度之间满足n'<n<N。

使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射ϕ产生。

则对于n维空间的特征分解:

映射为:

通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方耐坦唤法进行降维。一般来说,映射ϕ不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。

这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如第六节的为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

PCA算法的主要优点有:

LDA(线性判别分析,Linear Discriminant Analysis)是另一种常用的降维方法,它是有监督的。LDA在模式识别领域(比如人脸识别,舰艇识别昌凯等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。这里需要注意的是,此处的LDA与文本主题模型中的LDA(隐含狄利克雷分布,Latent Dirichlet Allocation)并不相同,他是一种处理文档的主题模型。

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。

LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。

什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。

LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。

这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

LDA算法的主要优点有:

参考文章: 刘建平老师的博客园

PCA是一种无参数的数据降维方法,在机器学习中很常用,这篇文章主要从三个角度来说明PCA是怎么降维的分别是方差角度,特征值和特征向量以及SVD奇异值分解。

推导主要来源于下面网址的这篇文章,是通过方差和协方差矩阵来说明:

http://blog.codinglabs.org/articles/pca-tutorial.html

PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

在上面网址的文章中,从头到尾发明了一遍PCA我觉得芹凳神很有借鉴意义。我们知道PCA是一种数据降维的方法,在降低维度的过程中,我们当然想要保留更多的特征,PCA就是经过数学推导,保留最多特征同时降维的方法。

在推导之前要先知道几个基础知识:

两个维数相同的向量的内积被定义为:

假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见我们假设A和B均为二维向量,则A=(x 1 ,y 1 ),B=(x 2 ,y 2 )。则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:

到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:

下面我们继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:

在代数表示方面,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是我们再熟悉不过的向量表示。

不过我们常常忽略, 只有一个(3,2)本身是不能够精确表示一个向量的。 我们仔细看一下, 这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。 也就是说我们其实 隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。 那么一个向量(3,2)实际是说在x轴投影为3而y轴的投影为2。注意投影是一个矢量,所以可以为负。

更正式的说, 向量(x,y)实际上表示线性组合

我们之所以默认选择(1,0)和(0,1)为基,当然是比较方便,因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。 但实际粗猛上任何两个线性无关的二维向量都可以成为一组基, 所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。

例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上嫌亏的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为(1/√2,1/√2)和(-1/√2,1/√2)

现在,我们想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为(5/√2,-1/√2)。下图给出了新的基以及(3,2)在新基上坐标值的示意图:

另外这里要注意的是,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质, 所以一般使用的基都是正交的。

一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。 (新基按行,向量按列)

特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说, 我们可以将一N维数据变换到更低维度的空间中去 , 变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

最后,上述分析同时给矩阵相乘找到了一种物理解释: 两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。 更抽象的说,一个矩阵可以表示一种线性变换。很多同学在学线性代数时对矩阵相乘的方法感到奇怪,但是如果明白了矩阵相乘的物理意义,其合理性就一目了然了。

我们从上面的矩阵乘法与基变换可以看出,当新基的维数小于原来的维数时可以做到数据的降维,但是究竟如何选择新基就是我们现在面临的问题,我们想要选择一个维数更小的新基,同时新基保留有更多的信息。我们知道矩阵向新基投影的形式,也就是PCA是将一组N维的特征投影到K维(K<N)同时保留更多的特征。

那么怎么衡量更多的特征,也就是投影后尽量少的重叠,投影值尽可能分散。

这种投影值的分散数学上可以用方差表示。方差公式这里不表, 所以PCA现在的问题就变成了,寻找K维的新基,使得数据变换到这组基上后方差值最大。

从二维到一维的降维,只需要找到一个一维基使得方差最大,但是三维降到二维呢?我们需要找到两个基让这个三维数据投影到两个基上,如果我们找方差最大的两个基,会发现他们完全一样或者线性相关,这和一个基没什么区别,不能表达更多的信息,所以我们需要添加限制条件,我们希望这两个基彼此线性无关,扩展到K个基也是一样。

在数学上使用协方差表示两个向量的相关性,在我们将均值归一化为0后,协方差可以表示为:

=\frac{1}{m}\sum_{i=1}^{m}a_ib_i)

m为向量的元素数。可以看到,在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。

当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。

至此,我们得到了降维问题的优化目标: 将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

上面我们导出了优化目标,但是这个目标似乎不能直接作为 *** 作指南(或者说算法),因为它只说要什么,但根本没有说怎么做。所以我们要继续在数学上研究计算方案。

我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:

假设我们只有a和b两个特征,那么我们将它们按行组成矩阵X:

然后我们用X乘以X的转置,并乘上系数1/m:

这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。

根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:

设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1/mXX T ,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:

设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:

现在事情很明白了!我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说, 优化目标变成了寻找一个矩阵P,满足PCP T 是一个对角矩阵 ,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:

1)实对称矩阵不同特征值对应的特征向量必然正交。

2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。

由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e 1 ,e 2 ,...,e n ,我们将其按列组成矩阵:

则对协方差矩阵C有如下结论:

其中Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。以上结论不再给出严格的数学证明,对证明感兴趣的朋友可以参考线性代数书籍关于“实对称矩阵对角化”的内容。

到这里,我们发现我们已经找到了需要的矩阵P:

P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。

至此我们完成了整个PCA的数学原理讨论。

在我的文章特征值和特征向量中说过,特征值反映了矩阵对于特征向量的拉伸程度,只有拉伸而没有旋转,也就是在特征向量方向上的作用程度,所以在PCA中我们选取前K个特征向量组成新基进行投影,就是因为原特征在前K个特征向量有最大的作用程度,投影过后可以保留更多的信息,作用程度是用特征值表示的,所以我们可以使用下面的式子表示贡献率,贡献率是表示投影后信息的保留程度的变量,可以用下面的式子表示:

也就是特征值的总和比上前K个特征值,一般来说贡献率要大于85%。

上面的推导中我们看到

其实就是对于D的奇异值分解。但是其实两者还有一些区别:

1) SVD可以获取另一个方向上的主成分,而PCA只能获得单个方向上的主成分:

隐语义索引(Latent semantic indexing,简称LSI)通常建立在SVD的基础上,通过低秩逼近达到降维的目的。

注意到PCA也能达到降秩的目的,但是PCA需要进行零均值化,且丢失了矩阵的稀疏性。

通过SVD可以得到PCA相同的结果,但是SVD通常比直接使用PCA更稳定。因为PCA需要计算X T X的值,对于某些矩阵,求协方差时很可能会丢失一些精度。例如Lauchli矩阵:

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PX即为降维到k维后的数据

courser里吴恩达的PCA的习题就不错。

1.1 维度

    对于数组和series来说,维度就是shape返回的结果,shape中返回几个数字就是几维。对图像来说,维度就是图像中特征向量的数量。降维算法中的”降维“,指的是降低特征矩阵中特征的数量。

1.2 sklearn中的降维算法

    sklearn中的降维算法在模块decomposition中,这个模块的本质是一个矩阵分解模块。矩阵分解可以用在降维,深度学习,聚类分析,数据预处理,低纬度特征学习,推荐系统,大数据分析等领域。 SVD和主成分分析PCA都是通过分解特征矩阵来进行降维的 。

1.3 PCA

    在降维的过程中,将会减少特征的数量,这意味着删除部分数据,数据量变少则表示模型可获取的信息变少了,模型的表现可能会因此受到影响。同时,在高维数据中,必然也有数喊一些特征是不带有效信息的(噪音),或是有一些特征带有的信息和其他一些特征是重复的(一些特征之间可能会线性相关)。我们希望在降维的过程中,既能减少特征的数量又保留大部分有效信息,那就将带有重复信息的特征合并,并删除那些带有无效信息的特征,创建出一个能携带大部分信息,特征更少的特征矩阵。

    在降维中,PCA使用的信息量衡量指标是样本方差,又称可解释性方差,方差越大,特征携带的信息量越多。

    var代表一个特征的方差,n代表样本量,xi代表一个特征中每个样本的取值,xhat代表这笑举一列样本的均值。

1.4 降维的实现

    步骤3中,我们用来找出n个新特征向量,让数据能够被压缩到少数特征上并且中信息量不损失太多的技术就是矩阵分解,PCA与SVD是两种不同的降维算法,但是都遵从上面的过程来降维,只是两种算法的矩阵分解的方法不同,信息量的衡量指标不同。PCA使用方差作为信息量的衡量指标,并且使用特征值分解来找出空间V。降维时,它会产生协方差矩阵 将特征矩阵分解为以下三个矩阵,其中Q和 是辅助的矩阵, 是一个对角矩阵(除对角线上有值,其他位置都是0的矩阵),其对角线上的元素就是方差,降维完成之后,PCA找到的每个新特征向量就叫做“主成分”,而被丢弃的特征向量被认为信息量很少,这些信息很可能就是噪音。

    SVD使用奇异值分解来找出空间V,其中Σ也是一个对角矩阵,不过它对角线上的元素是奇异值,这也是SVD中用来衡量特征上的信息量的指标。U和V^{T}分别是左奇异矩阵和右奇异矩阵,也都是辅助矩阵。

      在数学原理中,无论是PCA还是SVD都需要遍历所有的特征和样本来计算信息量指标,并且在矩阵分解的过程中,会产生比原来更大的矩阵,比如原数据的结构是(m,n),在矩阵分解中为了找出最佳新特征空间V,可能需要产生(n,n),(m,m)大小的矩阵,还需要产生协方差矩阵去计算更多的信息,因此,降维算法的计算量很大,运行比较缓慢。

       PAC数据特征创造并不属于特征选择,特征选择只是从已经存在的特征中选取携带信息量最多的,选完之后特征依然具有可解释性,仍然能解释改特征在原数据集上的含义。而PCA是将已经存在的特征进行压缩,降维后的特征不是原特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。在新的特征矩阵生成之前,我们无法得知PCA是建立在怎么样的新特征向量上,所以薯升野新特征矩阵生成之后不再具有可读性,我们无法判断新特征矩阵的特征是从原数据中的什么特征组合而来,新特征虽然带有原始数据的信息,却已经不是原数据上代表着的含义了。PCA一般不适用于探索特征和标签之间的关系的模型(如线性回归),因为无法解释的新特征和标签之间的关系不具有意义。

1.5 sklearn.decomposition.PCA

    class sklearn.decomposition.PCA (n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0,iterated_power=’auto’, random_state=None)

    n_components就是降维后需要保留的特征数量,即降维流程中第二步里面需要确认的k值,一般输入[0,min(X.shape)]范围中的整数,k的值会影响到模型的表现,如果k值太大,留下的特征太多,达不到降维的效果,如果k值太小,留下的特征太少,那新特征向量可能无法容纳原始数据集中的大部分信息。n_components取值如何选呢?

    a. 选择最好的n_components:累积可解释方差贡献率曲线。

    当参数n_components中不填写任何值,则默认返回min(X.shape)个特征,一般来说,样本量都会大于特征数目,所以什么都不填就相当于转换了新特征空间,但没有减少特征的个数。一般来说,不会使用这种输入方式。但我们却可以使用这种输入方式来画出累计可解释方差贡献率曲线,以此选择最好的n_components的整数取值。累计可解释方差贡献率曲线是一天以降维后保留的特征个数为横坐标,降维后新特征捕捉到的可解释方差贡献率为纵坐标的曲线,能帮助我们决定n_components的最好取值.

    b.最大似然估计自选超参数

    PCA用最大似然估计(maximum likelihoodestimation)自选超参数的方法,输入“mle”作为n_components的参数输入,就可以调用这种方法。

     c.按信息量占比选超参数

        输入[0,1]之间的浮点数,并且让参数svd_solver =='full',表示希望降维后的总解释性方差占比大于n_components指定的百分比,即是说,希望保留百分之多少的信息量。比如说,如果我们希望保留97%的信息量,就可以输入n_components = 0.97,PCA会自动选出能够让保留的信息量超过97%的特征数量

        svd_solver是奇异值分解器的意思,PCA中为什么会有关奇异值分解的参数呢?SVD有一个惊人的数学性质,它能跳过数学神秘宇宙,不计算协方差矩阵,直接找出一个新特征向量组成的n维空间,而这个n维空间就是奇异值分解后的右矩阵 (就是降维过程中所说的生成新特征向量组成的空间V,并非巧合,而特指奇异值分解中的矩阵 )

        右奇异矩阵 有着如下性质:

        k就是n_compoents,是我们降维后希望得到的维度。若X为(m,n)的特征矩阵, 就是结构为(n,n)的矩阵,取这个矩阵的前k行(进行切片),即将V转化为结构是(k,n)的矩阵。而 与原矩阵X相乘,即可得到降维后的特征矩阵X_dr, 这是说,奇异值分解可以不计算协方差矩阵等等结构复杂计算冗长的矩阵,就直接求出新特征空间和降维后的特征矩阵。

        简而言之,SVD在矩阵分解中的过程比PCA简单快速,但是遗憾的是,SVD的信息量衡量指标比较复杂,要理解”奇异值“远不如理解”方差“来得容易,因此,sklearn将降维流程拆分为了两部分,一部分是计算特征空间的V,由奇异值分解完成,另一部分是映射数据和求解新特征矩阵,由主成分分析完成,实现了用SVD的性质减少计算量,却让信息量的评估指标是方差,具体的流程如下图:

1.6 重要参数 svd_solver与random_state

    参数svd_solver是在降维过程中,用来控制矩阵分解的一些细节的参数。有四种模式可选:"auto", "full", "arpack","randomized",默认”auto"。

    1.'auto':基于X.shape和n_compoents的默认策略来选择分解器,如果输入数据的尺寸大于500X500且要提取的特征小于数据最小维度的min(X.shape)的80%,就用效果更高的‘randomized’方法,否则就精确完整的SVD将被计算,截断将会在矩阵被分解完成后有选择的发生。

    2.‘full’:从scipy.linalg.svd中调用标准的LAPACK分解器来生成精确完整的SVD,适合数据量比较适中,计算时间充足的情况,生成的精确完整的SVD的结构为:

    3.‘arpack’:从scipy.sparse.linalg.svds调用ARPACK分解器来运行截断奇异值分解(SVD truncated),分解时就将特征数量降到n_components中输入的数值k,可以加快运算速度,适合特征矩阵很大的时候,但一般用于特征矩阵为稀疏矩阵的情况,此过程包含一定的随机性。截断后的SVD分解出的结构为:

     4.‘randomized’:通过Halko等人的随机方法进行随机SVD。在"full"方法中,分解器会根据原始数据和输入的n_components值去计算和寻找符合需求的新特征向量,但是在"randomized"方法中,分解器会先生成多个随机向量,然后一一去检测这些随机向量中是否有任何一个符合我们的分解需求,如果符合,就保留这个随机向量,并基于这个随机向量来构建后续的向量空间。这个方法已经被Halko等人证明,比"full"模式下计算快很多,并且还能够保证模型运行效果。适合特征矩阵巨大,计算量庞大的情况。

    而参数random_state在参数svd_solver的值为"arpack" or "randomized"的时候生效,可以控制这两种SVD模式中的随机模式。通常我们就选用”auto“,不必对这个参数纠结太多。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12308814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存