PCA:详细解释主成分分析,2024年最新5天拿到华为物联网嵌入式开发岗offer

37 阅读10分钟

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

j

x_j

xj​都有各自的特征值。以下面的数据为例
这里写图片描述

第一步:对所有特征进行中心化:去均值(这步很重要,之后会解释)

求每一个特征的平均值,然后对于所有的样本,每一个特征都减去自身的均值。

特征

x

1

x_1

x1​的平均值 :

x

1

=

1

M

i

=

1

M

x

1

i

=

1

2

2.5

0.3

6

.

.

.

0.5

10

=

2.31

\overline{x_1}=\frac{1}{M}\sum_{i=1}^M{x_1^i}=\frac{1+2+2.5+0.3+6+...+0.5}{10}=2.31

x1​​=M1​∑i=1M​x1i​=101+2+2.5+0.3+6+...+0.5​=2.31

特征

x

2

x_2

x2​的平均值 :

x

2

=

1

M

i

=

1

M

x

2

i

=

32

45

7

.

.

.

10

10

=

20.1

\overline{x_2}=\frac{1}{M}\sum_{i=1}^M{x_2^i}=\frac{32+45+7+...+10}{10}=20.1

x2​​=M1​∑i=1M​x2i​=1032+45+7+...+10​=20.1
这里写图片描述
经过去均值处理之后,原始特征的值就变成了新的值,在这个新的norm_data的基础上,进行下面的操作。

第二步:求协方差矩阵C

C

=

[

c

o

v

(

x

1

,

x

1

)

c

o

v

(

x

1

,

x

2

)

c

o

v

(

x

2

,

x

1

)

c

o

v

(

x

2

,

x

2

)

]

C=\begin{bmatrix} cov(x_1,x_1)&cov(x_1,x_2)\ cov(x_2,x_1)&cov(x_2,x_2)\ \end{bmatrix}

C=[cov(x1​,x1​)cov(x2​,x1​)​cov(x1​,x2​)cov(x2​,x2​)​]
上述矩阵中,对角线上分别是特征

x

1

x

2

x_1和x_2

x1​和x2​的方差,非对角线上是协方差。协方差大于0表示

x

1

x

2

x_1和x_2

x1​和x2​若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。其中,

c

o

v

(

x

1

,

x

1

)

cov(x_1,x_1)

cov(x1​,x1​)的求解公式如下,其他类似

c

o

v

(

x

1

,

x

1

)

=

i

=

1

M

(

x

1

i

x

1

)

(

x

1

i

x

1

)

M

1

cov(x_1,x_1)=\frac{\sum_{i=1}^M{(x_1^i-\overline{x_1}})(x_1^i-\overline{x_1})}{M-1}

cov(x1​,x1​)=M−1∑i=1M​(x1i​−x1​​)(x1i​−x1​​)​
根据上面的协方差计算公式我们就得到了这

M

M

M个样本在这

N

N

N维特征下的协方差矩阵C。ps:之所以除以M-1而不是除以M,是因为这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计”。具体推导过程可以参见博文:样本方差的无偏估计与(n-1)的由来

第三步:求协方差矩阵C的特征值和相对应的特征向量

利用矩阵的知识,求协方差矩阵

C

C

C 的特征值

λ

\lambda

λ 和相对应的特征向量

u

u

u(每一个特征值对应一个特征向量):

C

u

=

λ

u

Cu=\lambda u

Cu=λu
特征值

λ

\lambda

λ 会有

N

N

N个,每一个

λ

i

\lambda_i

λi​ 对应一个特征向量

u

i

u_i

ui​ ,将特征值

λ

\lambda

λ 按照从大到小的顺序排序,选择最大的前k个,并将其相对应的k个特征向量拿出来,我们会得到一组

{

(

λ

1

u

1

)

(

λ

2

u

2

)

.

.

.

(

λ

k

u

k

)

}

{(\lambda_1,u_1),(\lambda_2,u_2),...,(\lambda_k,u_k)}

{(λ1​,u1​),(λ2​,u2​),...,(λk​,uk​)}。本例中原始特征只有2维,我在选取

λ

\lambda

λ 的时候,令

k

=

1

k=1

k=1,选择最大的

λ

1

和其对应的

u

1

\lambda_1和其对应的u_1

λ1​和其对应的u1​。

第四步:将原始特征投影到选取的特征向量上,得到降维后的新K维特征

这个选取最大的前k个特征值和相对应的特征向量,并进行投影的过程,就是降维的过程。对于每一个样本

X

i

X^i

Xi,原来的特征是

(

x

1

i

x

2

i

,

.

.

.

,

x

n

i

)

T

(x^i_1,x^i_2,...,x^i_n)^T

(x1i​,x2i​,...,xni​)T,投影之后的新特征是

(

y

1

i

y

2

i

,

.

.

.

,

y

k

i

)

T

(y_1^i,y_2^i,...,y_k^i)^T

(y1i​,y2i​,...,yki​)T ,新特征的计算公式如下:

[

y

1

i

y

2

i

.

.

.

y

k

i

]

=

[

u

1

T

.

(

x

1

i

,

x

2

i

,

.

.

.

,

x

n

i

)

T

u

2

T

.

(

x

1

i

,

x

2

i

,

.

.

.

,

x

n

i

)

T

.

.

.

u

k

T

.

(

x

1

i

,

x

2

i

,

.

.

.

,

x

n

i

)

]

\begin{bmatrix} y_1^i\ y_2^i\ .\ .\ .\ y_k^i\ \end{bmatrix}=\begin{bmatrix} u_1^T . (x^i_1, x^i_2,...,x^i_n)^T\ u_2^T . (x^i_1, x^i_2,...,x^i_n)^T\ .\ .\ .\ u_k^T . (x^i_1, x^i_2,...,x^i_n)\ \end{bmatrix}

​y1i​y2i​...yki​​

​=

​u1T​.(x1i​,x2i​,...,xni​)Tu2T​.(x1i​,x2i​,...,xni​)T...ukT​.(x1i​,x2i​,...,xni​)​

对于我们的例子来说,每一个样本

X

i

X^i

Xi,由原来的

X

i

=

(

x

1

i

,

x

2

i

)

T

X^i =(x^i_1, x^i_2)^T

Xi=(x1i​,x2i​)T变成了现在

X

i

=

y

1

i

X^i =y^i_1

Xi=y1i​,达到了降维的目的。

3 原理分析

3.1 为什么样本在“协方差矩阵C的最大K个特征值所对应的特征向量”上的投影就是k维理想特征?

其中一种解释是: 最大方差理论:方差越大,信息量就越大。协方差矩阵的每一个特征向量就是一个投影面,每一个特征向量所对应的特征值就是原始特征投影到这个投影面之后的方差。由于投影过去之后,我们要尽可能保证信息不丢失,所以要选择具有较大方差的投影面对原始特征进行投影,也就是选择具有较大特征值的特征向量。然后将原始特征投影在这些特征向量上,投影后的值就是新的特征值。每一个投影面生成一个新的特征,k个投影面就生成k个新特征。

PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。

3.2 那为什么协方差矩阵的特征向量可以看做是投影面,相对应的特征值是原始特征投影到这个投影面之后的方差??

现在,假设有以下几个样本,特征只有2个维度。做完预处理(减去了均值,这步很重要,之后会解释)之后,分布如下:
这里写图片描述
现在将这些样本往低维空间进行投影,二维特征降维的话就是往一维降,投影直线有很多,比如下面的

u

1

u

2

u_1和u_2

u1​和u2​,选哪一条比较好呢?
这里写图片描述
根据方差最大理论,选择投影过去之后,样本方差最大的那条投影直线作为投影维度,对原始特征进行降维。经过计算,

u

1

u_1

u1​比较好,因为投影后的样本点之间方差最大。

那么,投影过去之后样本之间的方差怎么计算?

以一个样本

X

i

X^i

Xi为例,蓝色点表示该样本,原始特征有2维,绿色点表示样本在u上的投影,u是该投影直线的单位向量。那么该样本的原二维特征

x

i

=

(

x

1

x

2

)

T

x^i=(x_1,x_2)^T

xi=(x1​,x2​)T投影到这个投影直线上就变成了一维特征(从二维坐标系变到了一维坐标系

u

u

u上),这个一维特征的值 = 投影点到原点的距离:

x

i

T

u

{x^i}^Tu

xiTu(根据向量的计算公式得到)。
这里写图片描述
同理,其他的样本投影到该投影直线上,生成的新的一维特征也这么计算。那么,投影之后的所有样本之间的方差就等于(根据方差的定义):

方差

=

1

M

i

=

1

M

(

x

i

T

u

所有

x

i

T

u

的均值

)

2

=

1

M

i

=

1

M

(

x

i

T

u

)

2

(式

1

方差=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu-所有{x^i}^Tu的均值)^2}=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2} (式1)

方差=M1​i=1∑M​(xiTu−所有xiTu的均值)2=M1​i=1∑M​(xiTu)2(式1)
由于这些样本原特征的每一维特征在最一开始都进行了去均值操作,所以

x

i

x^i

xi每一维特征的均值都为0,因此投影到u上的特征的均值仍然是0(

所有

x

i

T

u

的均值

所有{x^i}^Tu的均值

所有xiTu的均值=0)。对上式进行变换

方差

=

1

M

i

=

1

M

(

x

i

T

u

)

2

=

1

M

i

=

1

M

u

T

x

i

x

i

T

u

=

u

T

(

1

M

i

=

1

M

x

i

x

i

T

)

u

(式

2

方差=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2}=\frac{1}{M}\sum_{i=1}^M{{u^Tx^ix^i}^Tu}=u^T (\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T})u (式2)

方差=M1​i=1∑M​(xiTu)2=M1​i=1∑M​uTxixiTu=uT(M1​i=1∑M​xixiT)u(式2)
那么怎么求这个方差的最大值呢?我们发现,

1

M

i

=

1

M

x

i

x

i

T

\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}

M1​∑i=1M​xixiT是一个方形矩阵,我们可以从矩阵的角度求解,令方差

1

M

i

=

1

M

(

x

i

T

u

)

2

=

λ

\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2}=\lambda

M1​∑i=1M​(xiTu)2=λ,

C

=

1

M

i

=

1

M

x

i

x

i

T

C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}

C=M1​∑i=1M​xixiT,上式就变成了

λ

=

u

T

C

u

\lambda=u^TCu

λ=uTCu
由于

u

u

u是单位向量,

u

T

u

=

1

u^Tu=1

uTu=1,上式两边左乘

u

u

u得,

C

u

=

λ

u

Cu=\lambda u

Cu=λu
方差

λ

\lambda

λ就是方阵

C

C

C的特征值,

u

u

u是特征向量。一个矩阵的特征值

λ

\lambda

λ根据矩阵运算很容易求得。所以求解

λ

\lambda

λ的关键就是构造出矩阵C,我们把矩阵

C

=

1

M

i

=

1

M

x

i

x

i

T

C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}

C=M1​∑i=1M​xixiT展开,把

x

i

=

(

x

1

i

x

2

i

)

T

x^i=(x^i_1,x^i_2)^T

xi=(x1i​,x2i​)T带进去,

C

=

1

M

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取