图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)

(机器学习)sklearn降维算法PCA(用几个小案例详解PCA降维) 本文主要参考菜菜的机器学习课程及其课件 本篇博文基本不涉及PCA的任何数学过程,仅讲解在sklearn中如何调用相关类实现PCA降维 目录1.维度和降维的定义1.1维度的定义1.2降维的含义1.3降维的步骤2.PCA和SVDclass sklearn.decomposition.PCA2.1重要参数n_components2.1.1案例:高维数据的可视化2.1.2 最大似然估计自选超参数n_components2.1.3 按信息量占比选超参数n_components2.2重要参数svd_solver 与 r 阅读详情

ShowMeAI研究中心


引言

在互联网大数据场景下,我们经常需要面对高维数据,在对这些数据做分析和可视化的时候,我们通常会面对「高维」这个障碍。在数据挖掘和建模的过程中,高维数据也同样带来大的计算量,占据更多的资源,而且许多变量之间可能存在相关性,从而增加了分析与建模的复杂性。

我们希望找到一种方法,在对数据完成降维「压缩」的同时,尽量减少信息损失。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。机器学习中的降维算法就是这样的一类算法。

主成分分析(Principal Components Analysis,简称PCA)是最重要的数据降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。本篇我们来展开讲解一下这个算法。

(本篇降维算法部分内容涉及到机器学习基础知识,没有先序知识储备的宝宝可以查看ShowMeAI的文章 图解机器学习 | 机器学习基础知识。

1.PCA与最大可分性

对于 X = [ x 1 x 2 . . . x n ] X = \begin {bmatrix} x_1 \\ x_2 \\ ... \\ x_n \end{bmatrix} X=⎣ ⎡​x1​x2​...xn​​⎦ ⎤​ , X ∈ R n X \in R^n X∈Rn 。我们希望 X X X 从 n n n 维降到 n ′ n^{'} n′ 维,同时希望信息损失最少。比如,从 n = 2 n = 2 n=2 维降到 n ′ = 1 n^{'} = 1 n′=1 。

左图为一个典型的例子,假如我们要对一系列人的样本进行数据降维(每个样本包含「身高」「体重」两个维度)。右图我们既可以降维到第一主成分轴,也可以降维到第二主成分轴。

哪个主成分轴更优呢?从直观感觉上,我们会认为「第一主成分轴」优于「第二主成分轴」,因为它比较大程度保留了数据之间的区分性(保留大部分信息)。

对PCA算法而言,我们希望找到小于原数据维度的若干个投影坐标方向,把数据投影在这些方向,获得压缩的信息表示。下面我们就一步一步来推导一下PCA算法原理。

2.基变换

先来复习一点点数学知识。我们知道要获得原始数据 X X X 新的表示空间 Y Y Y ,最简单的方法是对原始数据进行线性变换(也叫做基变换) Y = P X Y = PX Y=PX 。其中, X X X 是原始样本, P P P 是基向量, Y Y Y 是新表达。

数学表达为:

[ p 1 p 2 ⋮ p r ] r × n [ x 1 x 2 ⋯ x m ] n × m = [ p 1 x 1 p 1 x 2 ⋯ p 1 x m p 2 x 1 p 2 x 2 ⋯ p 2 x m ⋮ ⋮ ⋱ ⋮ p r x 1 p r x 2 ⋯ p r x m ] r × m \begin{bmatrix} p_1 \\ p_2 \\ \vdots \\ p_r \end{bmatrix}_{r \times n} \begin{bmatrix} x_1 & x_2 & \cdots & x_m \end{bmatrix}_{n \times m} = \begin{bmatrix} p_1 x_1 & p_1 x_2 & \cdots & p_1 x_m \\ p_2 x_1 & p_2 x_2 & \cdots & p_2 x_m \\ \vdots & \vdots & \ddots & \vdots \\ p_r x_1 & p_r x_2 & \cdots & p_r x_m\end{bmatrix}_{r\times m} ⎣ ⎡​p1​p2​⋮pr​​⎦ ⎤​r×n​[x1​​x2​​⋯​xm​​]n×m​=⎣ ⎡​p1​x1​p2​x1​⋮pr​x1​​p1​x2​p2​x2​⋮pr​x2​​⋯⋯⋱⋯​p1​xm​p2​xm​⋮pr​xm​​⎦ ⎤​r×m​

  • 其中 p i p_i pi​ 是行向量,表示第 i i i 个基;

  • x j x_j xj​ 是一个列向量,表示第 j j j 个原始数据记录。

当 r < n r < n r<n 时,即「基的维度<数据维度」时,可达到降维的目的,即 X ∈ R n × m → Y ∈ R r × m X \in R^{n \times m} \rightarrow Y \in R^{r \times m } X∈Rn×m→Y∈Rr×m 。

以直角坐标系下的点 ( 3 , 2 ) (3,2) (3,2) 为例,要把点 ( 3 , 2 ) (3,2) (3,2) 变换为新基上的坐标,就是用 ( 3 , 2 ) (3,2) (3,2) 与第一个基做内积运算,作为第一个新的坐标分量,然后用 ( 3 , 2 ) (3,2) (3,2) 与第二个基做内积运算,作为第二个新坐标的分量。

上述变化,在线性代数里,我们可以用矩阵相乘的形式简洁的来表示:

[ 1 2 1 2 − 1 2 1 2 ] [ 3 2 ] = [ 5 2 − 1 2 ] \begin{bmatrix}\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \\ -\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \end{bmatrix} \begin{bmatrix} 3 \\ 2\end{bmatrix} = \begin{bmatrix} \frac{5}{\sqrt 2} \\ - \frac{1}{\sqrt 2} \end{bmatrix} [2 ​1​−2 ​1​​2 ​1​2 ​1​​][32​]=[2 ​5​−2 ​1​​]

再稍微推广一下,假如我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用「基矩阵」乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1)、(2,2)、(3,3),想变换到刚才那组基上,可以如下这样表示:

[ 1 2 1 2 − 1 2 1 2 ] [ 1 2 3 1 2 3 ] = [ 2 2 4 2 6 2 0 0 0 ] \begin{bmatrix}\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \\ -\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \end{bmatrix} \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3\end{bmatrix} = \begin{bmatrix} 2\sqrt 2 & 4\sqrt2 & 6\sqrt2 \\ 0 & 0 & 0 \end{bmatrix} [2 ​1​−2 ​1​​2 ​1​2 ​1​​][11​22​33​]=[22 ​0​42 ​0​62 ​0​]

3.方差

在本文的开始部分,我们提到了,降维的目的是希望压缩数据但信息损失最少,也就是说,我们希望投影后的数据尽可能分散开。在数学上,这种分散程度我们用「方差」来表达,方差越大,数据越分散。

  • 定义方差 V a r Var Var :对于单一随机变量 a a a , V a r ( a ) = 1 m ∑ i = 1 m ( a i − μ ) 2 Var(a) = \frac{1}{m} \sum_{i = 1}^m (a_i - \mu)^2 Var(a)=m1​∑i=1m​(ai​−μ)2

  • 对数据做去中心化(方便后面操作): V a r ( a ) = 1 m ∑ i = 1 m a i 2 Var(a) = \frac{1}{m} \sum_{i = 1}^m a_i ^2 Var(a)=m1​∑i=1m​ai2​

V a r ( a ) Var(a) Var(a) 表示 a a a 的取值与其数学期望之间的偏离程度。若 V a r ( a ) Var(a) Var(a) 较小,意味着 a a a 的取值主要集中在期望 μ \mu μ 也就是 E ( a ) E(a) E(a) )的附近;反之,若 V a r ( a ) Var(a) Var(a) 较大,意味着 a a a 的取值比较分散。

我们来看一个具体的例子。假设我们5个样本数据,分别是 x 1 = [ 1 1 ] x_1 = \begin{bmatrix} 1 \\ 1 \end{bmatrix} x1​=[11​] 、 x 2 = [ 1 3 ] x_2 = \begin{bmatrix} 1 \\ 3\end{bmatrix} x2​=[13​] 、 x 3 = [ 2 3 ] x_3 = \begin{bmatrix} 2 \\ 3\end{bmatrix} x3​=[23​] 、 x 4 = [ 4 4 ] x_4 = \begin{bmatrix} 4 \\ 4\end{bmatrix} x4​=[44​] 、 x 5 = [ 2 4 ] x_5 = \begin{bmatrix} 2 \\ 4 \end{bmatrix} x5​=[24​] ,将它们表示成矩阵形式: X = [ 1 1 2 4 2 1 3 3 4 4 ] X = \begin{bmatrix} 1 & 1 & 2 & 4 & 2 \\ 1 & 3 & 3 & 4 & 4 \end {bmatrix} X=[11​13​23​44​24​] 。

为了后续处理方便,我们首先将每个字段内所有值都减去字段均值,其结果是将每个字段都变为均值为0。

我们看上面的数据,设第一个特征为 a a a ,第二个特征为 b b b ,则某个样本可以写作 x i = [ a b ] x_i = \begin{bmatrix} a \\ b \end {bmatrix} xi​=[ab​]
且特征 a a a 的均值为2,特征 b b b 的均值为3。所以,变换后

X = [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] X = \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix} X=[−1−2​−10​00​21​01​]

V a r ( a ) = 6 5 Var(a ) = \frac{\sqrt 6} {5} Var(a)=56 ​​

V a r ( b ) = 6 5 Var(b ) = \frac{\sqrt 6} {5} Var(b)=56 ​​

4.协方差

协方差(Covariance)在概率和统计学中用于衡量两个变量的总体误差。比如对于二维随机变量 x i = [ a b ] x_i = \begin{bmatrix} a \\ b \end{bmatrix} xi​=[ab​] ,特征 a 、 b a、b a、b 除了自身的数学期望和方差,还需要讨论 a 、 b a、b a、b 之间互相关系的数学特征。

定义协方差 C o v Cov Cov :

C o v ( a , b ) = 1 m ∑ i = 1 m a i b i Cov(a, b) = \frac{1}{m}\sum_{i = 1}^m a_i b_i Cov(a,b)=m1​i=1∑m​ai​bi​

当 C o v ( a , b ) = 0 Cov(a, b) = 0 Cov(a,b)=0 时,变量 a 、 b a、b a、b 完全独立,这也是我们希望达到的优化目标。方差是协方差的一种特殊情况,即当两个变量是相同的情况 C o v ( a , a ) = V a r ( a ) Cov(a, a) = Var(a) Cov(a,a)=Var(a) 。

5.协方差矩阵

对于二维随机变量 x i = [ a b ] x_i = \begin{bmatrix} a \\ b \end {bmatrix} xi​=[ab​] ,定义协方差矩阵 C = [ V a r ( a ) C o v ( a , b ) C o v ( b , a ) V a r ( b ) ] C = \begin{bmatrix} Var(a) & Cov(a, b) \\ Cov(b, a) &Var(b)\end{bmatrix} C=[Var(a)Cov(b,a)​Cov(a,b)Var(b)​] 。

对于 n n n 维随机变量

x i = [ x 1 x 2 ⋮ x n ] x_{i}=\left[\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{array}\right] xi​=⎣ ⎡​x1​x2​⋮xn​​⎦ ⎤​

C = [ V a r ( x 1 ) C o v ( x 1 , x 2 ) ⋯ C o v ( x 1 , x n ) C o v ( x 2 , x 1 ) V a r ( x 2 ) ⋯ C o v ( x 1 , x n ) ⋮ ⋮ ⋱ ⋮ C o v ( x n , x 1 ) C o v ( x n , x 2 ) ⋯ V a r ( x n ) ] C = \begin{bmatrix} Var(x_1) & Cov(x_1, x_2) &\cdots & Cov(x_1, x_n)\\ Cov(x_2, x_1)& Var(x_2) & \cdots & Cov(x_1, x_n)\\ \vdots & \vdots & \ddots & \vdots \\ Cov(x_n, x_1) & Cov(x_n, x_2) & \cdots &Var(x_n) \end{bmatrix} C=⎣ ⎡​Var(x1​)Cov(x2​,x1​)⋮Cov(xn​,x1​)​Cov(x1​,x2​)Var(x2​)⋮Cov(xn​,x2​)​⋯⋯⋱⋯​Cov(x1​,xn​)Cov(x1​,xn​)⋮Var(xn​)​⎦ ⎤​

我们可以看到,协方差矩阵是 n n n 行 n n n 列的对称矩阵,主对角线上是方差,而协对角线上是协方差。

我们再来用一个示例对应讲解一下。还是同样的5个样本数据

  • x 1 = [ 1 1 ] x_1 = \begin{bmatrix} 1 \\ 1 \end{bmatrix} x1​=[11​]

  • x 2 = [ 1 3 ] x_2 = \begin{bmatrix} 1 \\ 3\end{bmatrix} x2​=[13​]

  • x 3 = [ 2 3 ] x_3 = \begin{bmatrix} 2 \\ 3\end{bmatrix} x3​=[23​]

  • x 4 = [ 4 4 ] x_4 = \begin{bmatrix} 4 \\ 4\end{bmatrix} x4​=[44​]

  • x 5 = [ 2 4 ] x_5 = \begin{bmatrix} 2 \\ 4 \end{bmatrix} x5​=[24​]

去中心化后表示成矩阵

X = [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] X = \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix} X=[−1−2​−10​00​21​01​]

那如果有 m m m 个样本的话, X = [ a 1 a 2 ⋯ a m b 1 b 2 ⋯ b m ] X =\begin{bmatrix} a_1 & a_2 & \cdots &a_m \\ b_1 & b_2 & \cdots & b_m\end{bmatrix} X=[a1​b1​​a2​b2​​⋯⋯​am​bm​​] 。对 X X X 做一些变换,用 X X X 乘以 X X X 的转置,并乘上系数 1 / m 1/m 1/m :

1 m X X T = 1 m [ a 1 a 2 ⋯ a m b 1 b 2 ⋯ b m ] [ a 1 b 1 a 2 b 2 ⋮ ⋮ a m b m ] = = [ 1 m ∑ i = 1 m a i 2 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m b i 2 ] \frac{1}{m}XX^T = \frac{1}{m}\begin{bmatrix} a_1 & a_2 & \cdots &a_m \\ b_1 & b_2 & \cdots & b_m\end{bmatrix}\begin{bmatrix} a_1 & b_1 \\ a_2 & b_2 \\ \vdots & \vdots \\ a_m &b_m \end{bmatrix}== \begin{bmatrix} \frac{1}{m} \sum_{i = 1}^m a_i ^2 & \frac{1}{m}\sum_{i = 1}^m a_i b_i \\ \frac{1}{m}\sum_{i = 1}^m a_i b_i& \frac{1}{m} \sum_{i = 1}^m b_i^2 \end{bmatrix} m1​XXT=m1​[a1​b1​​a2​b2​​⋯⋯​am​bm​​]⎣ ⎡​a1​a2​⋮am​​b1​b2​⋮bm​​⎦ ⎤​==[m1​∑i=1m​ai2​m1​∑i=1m​ai​bi​​m1​∑i=1m​ai​bi​m1​∑i=1m​bi2​​]

这正是协方差矩阵!我们归纳得到:设我们有 m m m 个 n n n 维数据记录,将其按列排成 n n n 乘 m m m 的矩阵 X X X ,设 C = 1 m X X T C = \frac{1}{m}XX^T C=m1​XXT ,则 C C C 是一个对称矩阵,其对角线分别个各个特征的方差,而第 i i i 行 j j j 列和 j j j 行 i i i 列元素相同,表示 i i i 和 j j j 两个特征之间的协方差。

6.协方差矩阵对角化

再回到我们的场景和目标:

  • 现在我们有 m m m 个样本数据,每个样本有 n n n 个特征,那么设这些原始数据为 X X X , X X X 为 n n n 行 m m m 列的矩阵。

  • 想要找到一个基 P P P ,使 Y r × m = P r × n X n × m Y_{r \times m} = P_{r \times n}X_{n \times m} Yr×m​=Pr×n​Xn×m​ ,其中 $r<n $,达到降维的目的。

设 X X X 的协方差矩阵为 C C C , Y Y Y 的协方差矩阵为 D D D ,且 Y = P X Y = PX Y=PX 。

  • 我们的目的变为:对原始数据 X X X 做PCA后,得到的 Y Y Y 的协方差矩阵 D D D 的各个方向方差最大,协方差为0。

那么 C C C 与 D D D 是什么关系呢?

D = 1 m Y Y T = 1 m ( P X ) ( P X ) T = 1 m P X X T P T = 1 m P ( X X T ) P T = P C P T = P [ 1 m ∑ i = 1 m a i 2 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m b i 2 ] P T \begin{aligned} D & =\frac{1}{m} Y Y^{T} \\ & =\frac{1}{m}(P X)(P X)^{T} \\ & =\frac{1}{m} P X X^{T} P^{T} \\ & =\frac{1}{m} P\left(X X^{T}\right) P^{T} \\ & =P C P^{T} \\ & =P\left[\begin{array}{cc} \frac{1}{m} \sum_{i=1}^{m} a_{i}^{2} & \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} \\ \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} & \frac{1}{m} \sum_{i=1}^{m} b_{i}^{2} \end{array}\right] P^{T} \end{aligned} D​=m1​YYT=m1​(PX)(PX)T=m1​PXXTPT=m1​P(XXT)PT=PCPT=P[m1​∑i=1m​ai2​m1​∑i=1m​ai​bi​​m1​∑i=1m​ai​bi​m1​∑i=1m​bi2​​]PT​

我们发现,要找的 P P P 不是别的,而是能让原始协方差矩阵对角化的 P P P 。

换句话说,优化目标变成了寻找一个矩阵 P P P ,满足 P C P T PCP^T PCPT 是一个对角矩阵,并且对角元素按从大到小依次排列,那么 $P的前 $K行就是要寻找的基,用 P P P 的前 K K K 行组成的矩阵乘以 X X X 就使得 X X X 从 N N N 维降到了 K K K 维并满足上述优化条件。

最终我们聚焦在协方差矩阵对角化这个问题上。

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

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

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

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

E = [ e 1 e 2 ⋯   e n ] E = \begin{bmatrix} e_1 & e_2 & \cdots \ e_n\end{bmatrix} E=[e1​​e2​​⋯ en​​]

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

E T C E = Λ = [ λ 1 λ 2 ⋱ λ n ] E^T C E = \Lambda = \begin{bmatrix} \lambda_1 \\ & \lambda_2 \\ &&\ddots \\ &&&\lambda_n\end {bmatrix} ETCE=Λ=⎣ ⎡​λ1​​λ2​​⋱​λn​​⎦ ⎤​

其中 Λ \Lambda Λ 为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。
结合上面的公式:

D = P C P T D = PCP^T D=PCPT

其中, D D D 为对角矩阵,我们可以得到:

P = E T P = E^T P=ET

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

7.PCA算法

总结一下PCA的算法步骤:

设有 m m m 条 n n n 维数据。

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

2)将 X X X 的每一行(代表一个特征)进行零均值化,即减去这一行的均值

3)求出协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^T C=m1​XXT

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

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

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

8.PCA代码实践

我们这里直接使用python机器学习工具库scikit-learn来给大家演示PCA算法应用(相关知识速查可以查看ShowMeAI文章AI建模工具速查|Scikit-learn使用指南),sklearn工具库中与PCA相关的类都在sklearn.decomposition包里,最常用的PCA类就是sklearn.decomposition.PCA。

1)参数介绍

sklearn中的PCA类使用简单,基本无需调参,一般只需要指定需要降维到的维度,或者降维后的主成分的方差和占原始维度所有特征方差和的比例阈值就可以了。

下面是sklearn.decomposition.PCA的主要参数介绍:

  • n_components:PCA降维后的特征维度数目。

  • whiten:是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1,默认值是False,即不进行白化。

  • svd_solver:奇异值分解SVD的方法,有4个可以选择的值:{‘auto’,‘full’,‘arpack’,‘randomized’}。

除上述输入参数,还有两个PCA类的成员属性也很重要:

  • ① explained_variance_,它代表降维后的各主成分的方差值。

  • ② explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例。

2)代码实例

# 构建数据样本并可视化

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
from sklearn.datasets import make_blobs

# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇
X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3,3, 3], [0,0,0], [1,1,1], [2,2,2]], cluster_std=[0.2, 0.1, 0.2, 0.2], 
                  random_state =9)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2],marker='x')

先不降维,只对数据进行投影,看看投影后的三个维度的方差分布,代码如下:

from sklearn.decomposition import PCA
pca = PCA(n_components=3)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)

输出如下:

[0.98318212 0.00850037 0.00831751]
[3.78521638 0.03272613 0.03202212]

可以看出投影后三个特征维度的方差比例大约为98.3%:0.8%:0.8%。投影后第一个特征占了绝大多数的主成分比例。现在我们来进行降维,从三维降到2维,代码如下:

pca = PCA(n_components=2)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)

输出如下:

[0.98318212 0.00850037]
[3.78521638 0.03272613]

这个结果其实可以预料,因为上面三个投影后的特征维度的方差分别为:[ 3.78521638 0.03272613],投影到二维后选择的肯定是前两个特征,而抛弃第三个特征。为了有个直观的认识,我们看看此时转化后的数据分布,代码如下:

X_new = pca.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1],marker='x')
plt.show()

从上图可以看出,降维后的数据依然清楚可见之前三维图中的4个簇。现在我们不直接指定降维的维度,而指定降维后的主成分方差和比例,来试验一下。

pca = PCA(n_components=0.9)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)

我们指定了主成分至少占90%,输出如下:

[0.98318212]
[3.78521638]
1

可见只有第一个投影特征被保留。这也很好理解,我们的第一个主成分占投影特征的方差比例高达98%。只选择这一个特征维度便可以满足90%的阈值。我们现在选择阈值99%看看,代码如下:

pca = PCA(n_components=0.99)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)

此时的输出如下:

[0.98318212 0.00850037]
[3.78521638 0.03272613]
2

这个结果也很好理解,因为我们第一个主成分占了98.3%的方差比例,第二个主成分占了0.8%的方差比例,两者一起可以满足我们的阈值。最后我们看看让MLE算法自己选择降维维度的效果,代码如下:

pca = PCA(n_components= 'mle',svd_solver='full')
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)

输出结果如下:

[0.98318212]
[3.78521638]
1

可见由于我们的数据的第一个投影特征的方差占比高达98.3%,MLE算法只保留了我们的第一个特征。

更多无监督学习的算法模型总结可以查看ShowMeAI的文章 AI知识技能速查 | 机器学习-无监督学习。

参考链接

ShowMeAI图解机器学习算法系列(完整版)

ShowMeAI系列教程精选推荐

机器学习 | 主成分分析(PCA) PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可以发现更便于人理解的特征,加快对样本有价值信息的处理速度,此外还可以应用于可视化(降到二维)和去噪。基本原理是通过线性变换将原始数据投影到新的坐标系,使得投影后的数据方差最大。PCA算法所要达到的目标是,降维后的数据所损失的信息量应该尽可能的少。 阅读详情

相关推荐

斯坦福大学机器学习笔记——降维(PCA算法)

降维也是一种无监督学习的问题。所谓的降维,就是将高维度的数据降低到低维度空间,同时降维之后的数据又能够很好的表征原来数据的特性。 以具体的例子来说明一下什么是降维: 比如我们使用厘米和英尺表示同一物体的长度,如果我们使用一个仪器测量的结果单位是厘米,另一个仪器测量单位是英尺,两种仪器对同一物体测量的结果可能不完全相同(由于误差和精度),但是如果直接将两个特征都作为该物体长度的特征又很冗余,所以我

wyl1813240346的博客 1万+

PCA算法详解——化繁为简

一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、前言 老鹰是一个三维立体实物,而图片是二维的,但我们能一眼识别出上图是一只老鹰而非鹌鹑,可见对于某些高维的数据,我们可以在低维空间下识其概貌,对其有个清晰的认知。然而,当我们沿老鹰翅尖拍摄一张照片,我们可能并不能很容易地看出这是一只老鹰。归其原因,拍摄的角度不同,导致最终的结果不同,在第一种情况下,图片保留...

weixin_44167798的博客 1万+

机器学习sklearn-PCA降维算法

1 概述 1.1 什么叫“维度” 对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维。 针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数 量。 对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴。 **降维算法中的”降维“,指的是降低特征矩阵中特征的数量。**降维的目的是为了让算法运算更 快,效果更好,但其实还有另一种需求:数据可视化。 1.2 sklearn中的降维算法 sklearn中降维算法都被包括在模块

weixin_44376037的博客 9818

PCA算法

在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。

crossoverpptx的博客 4704

Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法

PCA(主成分分析)的原理与实现方法。

Kant2048的博客 1996

Sklearn 机器学习 数据降维PCA 使用PCA算法

使用 Scikit-Learn 实现 PCA 主成分分析的完整指南。

Kant2048的博客 1280

【机器学习】机器学习之PCA降维

本次实验成功实现了人脸识别的核心步骤,运用机器学习算法进行全面学习与应用。首先,通过fetch_olivetti_faces函数加载人脸数据集,并通过PCA算法将数据降维至50维。随后,进行降维后数据的逆转换,得到了重建后的人脸数据,实现了维度还原。在实验过程中,随机选择了一张人脸图片,展示了原始、重建以及模糊后的人脸图像,生动呈现了降维对图像的影响。

朝花夕拾 2万+

数据降维(PCA算法在数据降维中的应用)

维度灾难 在实际问题中,我们常常会遇到采集到的数据特征数量过多的情况,甚至有时会出现训练集容量比特征数量还少的极端情况(在图片处理领域尤其常见),然而事实上,并不是采集到的每一个特征都对模型有训练意义。 维度的增加会导致相当棘手的情况出现,这通常会带来训练数据在高维空间的稀疏性质,为了获得在统计学上正确并且有可靠的结果,用来支撑这一结果所需要的数据量通常随着维数的提高而呈指数级增长。 此外,维度的增加会使模型训练的时间增加到无法忍耐的程度。 对于这样的问题,对数据进行降维将是很重要的一个手段。 主成分分析法

lxx909546478的博客 3216

【机器学习】降维系列算法(PCA、LDA、NMF、LLE)

降维(Dimensionality Reduction)是机器学习中用来减少数据集特征数量的技术,其目的是在尽可能保留原始数据信息的同时降低数据的复杂度。降维不仅可以加速模型训练、减少计算资源消耗,还能帮助消除噪声、提高模型性能,并且有助于可视化高维数据。PCA 是一种线性降维方法,它通过找到一组新的正交基(主成分),将原始数据投影到这些新轴上。新的坐标系中的每个维度都是原始变量的线性组合,且各维度之间相互独立。PCA的目标是在尽可能少的维度上保留尽可能多的数据方差。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现

前言 PCA多用于对数据特征集进行降维,也方便对数据集进行可视化操作,说白了最后进行结果展示那么多特征向量要一起表示的话肯定很难展示,超过三维的数据就很难展示了。而PCA可对特征集进行简化,通俗的来讲也就是合并好理解。PCA应用的范围很广因此很有必要要学习,原理肯定还是数学证明,在特征工程上经常使用。希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。 一、为什么需要PCA?(为什么要降维) 在各个领域进行数据收集或是数据采样时往往都是存在多个指标或是特征...

master_hunter的博客 4万+

微信小程序转化数据API自归因实战:PHP实现与2025升级要点解析

本文详细解析了2025年微信小程序转化数据API自归因的升级要点与PHP实战实现。核心变化包括接口地址更新、固定access_token的获取方式,以及新增timestamp与nonce等安全参数。文章提供了完整的PHP代码示例,帮助开发者高效完成数据上报,优化腾讯广告投放效果。

git9versioner的博客 989

《机器学习》—— PCA降维

一、PCA降维简单介绍、二、python中实现PCA降维函数的介绍、三、代码实现、四、PCA降维的优缺点

weixin_73504499的博客 3247

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

机器学习之PCA降维

PCA降维算法是高维数据处理的利器,通过识别数据中的关键方差方向实现有效降维。文章详细讲解了PCA的数学原理,包括基变换、方差最大化、协方差矩阵对角化等核心概念,并提供了完整的计算案例。同时介绍了sklearn中PCA模块的参数配置和使用方法,通过信用卡欺诈检测案例展示了PCA与逻辑回归结合的实际应用流程。PCA能有效消除多重共线性、减少噪声,但也存在可解释性差等缺点,需根据具体场景谨慎使用参数配置。

m0_74977182的博客 1826

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2475

使用amp训练出现Detected call of lr_scheduler.step() before optimizer.step().

这个警告是怎么产生的?是由于在算梯度的时候出现了nan,所以这一次更新会跳过,但是参数仍旧会更新所以出现了问题,按下面的做法加一个判断就行了。但是在使用amp进行混合精度训练出现的一个warning,调换代码顺序也不work。正常在训练的时候,对于优化器和参数更新的顺序这样就可以了。

weixin_46214675的博客 1306

机器学习-9 降维算法——PCA降维

①降维(Dimensionality Reduction,DR)是指采用线性或者非线性的映射方法将高维空间的样本映射到低维空间中。②降维获得低维空间的数据等价表示,实现高维数据的可视化呈现。仅仅需要以方差衡量信息量,不受数据集以外的因素影响。各主成分之间正交,可消除原始数据成分间的相互影响的因素。计算方法简单,主要运算是特征值分解,易于实现。

qq_51580006的博客 3406

避坑指南:SAP成本中心分割结构配置常见错误及解决(含KA06/KL01前置步骤)

本文深入解析了SAP成本中心会计中分割结构配置的关键步骤与常见错误。重点强调了配置前必须通过KA06创建次级成本要素(类别42)和通过KL01创建活动类型这两个核心前置步骤,并详细剖析了在OKES中定义分割规则及版本时的高频报错原因与解决方案,帮助顾问和运维人员有效规避配置陷阱,确保成本分摊的准确性。

pear55的博客 865

机器学习——PCA降维

①降维(Dimensionality Reduction,DR)是指采用线性或者非线性的映射方法将高维空间的样本映射到低维空间中。②降维获得低维空间的数据等价表示,实现高维数据的可视化呈现。-仅仅需要以方差衡量信息量,不受数据集以外的因素影响。-各主成分之间正交,可消除原始数据成分间的相互影响的因素。-计算方法简单,主要运算是特征值分解,易于实现。

weixin_74731967的博客 3823

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2444

Transformer实战(33)——高效自注意力机制

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担,介绍了高效的稀疏 Transformer 模型,通过近似技术(如 Linformer、BigBird 和 Performer) 用稀疏矩阵替代全自注意力矩阵。并观察它们在各种基准测试中的表现,例如计算复杂度和内存复杂度。结果表明,这些方法可以在不牺牲性能的情况下将平方级复杂度降低到线性复杂度。

盼小辉丶的博客 3109

PCA降维算法

PCA(主成分分析)的优点包括:降维效果显著:PCA能够有效减少数据集的维度,使得数据更易于可视化和处理,同时降低计算复杂度和存储需求。去除冗余信息:通过识别数据中的主要变化方向,PCA能够剔除高度相关的特征,减少数据中的冗余信息。噪声抑制:在降维过程中,PCA倾向于突出数据的主要变化趋势,从而能够在一定程度上减弱噪声的影响。特征正交:得到的主成分彼此正交,这意味着它们之间没有冗余信息,便于独立分析各主成分的重要性。

ayongshi2019的博客 2452

零件边界线提取处理原理详解

该程序提出了一种高效的点云边界提取方法,通过三阶段处理流程实现零件几何特征的精确提取。首先采用RANSAC算法进行坐标系标准化,包括主平面检测、点云分割和双重旋转对齐。接着使用凹包算法和RANSAC直线拟合提取底面边界。最后通过多方向密度切片分析(Z向100片、X向50片),自动选择高密度切片进行边界提取和直线拟合。算法具有鲁棒性强、处理效率高(支持OpenMP并行计算)和参数可配置等特点,能有效提取零件的几何边界特征,为后续质量检测提供基础。实验结果显示该方法能准确提取零件的多方向边界线。

weixin_45196569的博客 433

机器学习----PCA降维

本项目使用PCA(主成分分析)对鸢尾花数据集进行降维处理,然后使用逻辑回归进行分类,并比较降维前后的分类效果。

dlraba的博客 2468

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《机器学习》——PCA降维

主成分分析(Principal Component Analysis,PCA)是一种多变量统计分析方法。PCA 降维是基于这样一个理念:在高维数据空间中,存在一些方向(主成分)比其他方向更能代表数据的变化。通过将数据投影到这些主要方向上,我们可以在较低维度空间中表示数据,同时尽可能减少信息损失。例如,假设有一个三维数据集,数据点在某个平面附近分布较密集,而在垂直于该平面的方向上变化较小。PCA 降维就可以找到这个平面的方向作为主要成分,将数据从三维降到二维。去除噪声和冗余信息。

will be blogging 1932

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

机器学习中的PCA降维

PCA作为机器学习中最经典的降维算法,通过“最大化方差”的思想,将高维数据映射到低维空间,同时保留关键信息。本文从降维的必要性出发,逐步拆解了PCA的核心原理(主成分、方差最大化、特征分解),并通过鸢尾花数据集的案例演示了代码实现。需要注意的是,PCA并非万能:它适用于线性数据,且对异常值和尺度敏感。在实际应用中,我们需要根据数据特性(是否线性、是否存在异常值)和任务需求(是否需要可解释性)选择合适的降维方法(如t-SNE用于非线性可视化,LDA用于有监督分类)。

cpluspluszz的博客 1713

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 图解机器学习算法(12) | 支持向量机模型详解(机器学习通关指南·完结)
下一篇: 图解机器学习算法 | 从入门到精通系列教程(机器学习通关指南·完结)
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值