协方差的计算公式(协方差的计算公式excel)

先说主成分分析PCA。在解释这个方法之前,我们先快速回顾一下什么是特征降维。在机器学习领域,我们需要进行大量的特征工程,将物体的特征转化为计算机可以处理的各种数

先说主成分分析PCA。在解释这个方法之前,我们先快速回顾一下什么是特征降维。在机器学习领域,我们需要进行大量的特征工程,将物体的特征转化为计算机可以处理的各种数据。通常,如果我们增加一个项目的特征,就有可能提高机器学习的效果。但是,随着特征数量的增加,特征向量的维数也会增加。这样不仅会增加机器学习的难度,还会形成过拟合,影响最终的准确率。针对这种情况,我们需要过滤掉一些不重要的特征,或者合并一些相关的特征,从而降低特征的维数,尽可能的保留原始数据中包含的信息。了解了这些背景信息,我们再来看PCA方法。本节从它的操作步骤入手,把每一步解释清楚,然后再解释背后的核心思想。

14 . 1 . 1 PCA的主要步骤

与协同过滤一样,我们使用矩阵来表示数据集。让我们假设有

矩阵的特征:主成分分析(PCA)

样品,

矩阵的特征:主成分分析(PCA)

尺寸,并且这些特征都是数值型的,那么这个集合可以如表14-1所示显示。

表14-1数据记录及其特征

样品ID

1特点

2个特征

3个特征

...

特性

矩阵的特征:主成分分析(PCA)

特性

矩阵的特征:主成分分析(PCA)

一个

一个

...

?10.5

?8.2

2

2

?14

...

2.7

...

...

...

...

...

...

...

矩阵的特征:主成分分析(PCA)

2

...

55

13.6

那么这个样本集的矩阵形式是这样的:

矩阵的特征:主成分分析(PCA)

这个矩阵是

矩阵的特征:主成分分析(PCA)

其中每行代表一个样本,每列代表一个一维特征。我们称这个矩阵为样本矩阵。现在我们的问题是,能否通过某种方法找到一种变换,可以减少这个矩阵的列数,也就是特征的维数,尽可能地保留原始数据中的有用信息。针对这一问题,PCA方法提出了一种可行的解决方案。它包括以下四个主要步骤。

(1)将样本矩阵中的原始数据标准化。

(2)获得标准化数据的协方差矩阵。

(3)计算协方差矩阵的特征值和特征向量。

(4)根据特征值的大小选择主要特征向量,对原始数据进行转换,生成新的特征。

1.标准化样本矩阵中的原始数据

我们之前介绍过基于Z评分的特征标准化,这里需要做同样的处理,使各个维度特征的重要性具有可比性。需要注意的是,这里的标准化数据针对的是同一个特征,在同一个特征维度内。不同尺寸的特征不能一起标准化。

2.获得标准化数据的协方差矩阵。

首先,我们来看看什么是协方差和协方差矩阵。协方差用于衡量两个变量的总体误差。假设这两个变量是

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

,它们的抽样数都是

矩阵的特征:主成分分析(PCA)

,那么协方差的计算公式如下:

矩阵的特征:主成分分析(PCA)

其中,

矩阵的特征:主成分分析(PCA)

表示变量

矩阵的特征:主成分分析(PCA)

第一

矩阵的特征:主成分分析(PCA)

样本数据,

矩阵的特征:主成分分析(PCA)

这意味着

矩阵的特征:主成分分析(PCA)

样本的平均值。当两个变量是同一个变量时,协方差就变成了方差。

那么,什么是协方差矩阵呢?我们刚刚提到了样本矩阵,假设

矩阵的特征:主成分分析(PCA)

代表样本矩阵

矩阵的特征:主成分分析(PCA)

在第一列中,

矩阵的特征:主成分分析(PCA)

代表样本矩阵

矩阵的特征:主成分分析(PCA)

列2,依此类推。

矩阵的特征:主成分分析(PCA)

表示第一列中的向量及其自身的协方差,

矩阵的特征:主成分分析(PCA)

表示第一列向量和第二列向量之间的协方差。结合前面对协方差的定义,我们可以知道:

矩阵的特征:主成分分析(PCA)

其中,

矩阵的特征:主成分分析(PCA)

表示矩阵中的第一个。

矩阵的特征:主成分分析(PCA)

划,划

矩阵的特征:主成分分析(PCA)

列的元素。

矩阵的特征:主成分分析(PCA)

代表第一

矩阵的特征:主成分分析(PCA)

列的平均值。利用这些符号表示,我们可以生成以下协方差矩阵:

矩阵的特征:主成分分析(PCA)

从协方差的定义可以看出,

矩阵的特征:主成分分析(PCA)

,所以

矩阵的特征:主成分分析(PCA)

这是一个对称矩阵。此外,我们刚刚提到,是的

矩阵的特征:主成分分析(PCA)

而且,如果

矩阵的特征:主成分分析(PCA)

,那么

矩阵的特征:主成分分析(PCA)

也就是说,

矩阵的特征:主成分分析(PCA)

这组数字的方差。所以这个对称矩阵主对角线上的值就是每个维度特征的方差。

3.计算协方差矩阵的特征值和特征向量。

矩阵的特征向量和机器学习的特征向量是两回事。矩阵的特征值和特征向量是线性代数中两个非常重要的概念。对于矩阵

矩阵的特征:主成分分析(PCA)

,如果可以找到向量

矩阵的特征:主成分分析(PCA)

和标量

矩阵的特征:主成分分析(PCA)

,因此以下公式成立:

矩阵的特征:主成分分析(PCA)

所以,让我们说

矩阵的特征:主成分分析(PCA)

这是一个矩阵

矩阵的特征:主成分分析(PCA)

特征向量,以及

矩阵的特征:主成分分析(PCA)

这是一个矩阵

矩阵的特征:主成分分析(PCA)

的特征值。矩阵的特征向量和特征值可能不止一个。说到这里,你可能会好奇,特征向量和特征值是什么意思?为什么要在意这两个概念?简单地说,我们可以把向量

矩阵的特征:主成分分析(PCA)

向左乘一个矩阵。

矩阵的特征:主成分分析(PCA)

视为

矩阵的特征:主成分分析(PCA)

旋转或展开,我们之前介绍过,这种旋转和展开是由于左乘法矩阵。

矩阵的特征:主成分分析(PCA)

“运动”之后。固有向量

矩阵的特征:主成分分析(PCA)

表示矩阵

矩阵的特征:主成分分析(PCA)

运动方向,特征值

矩阵的特征:主成分分析(PCA)

表示运动的幅度,两者结合可以描述左乘矩阵X带来的效果,所以被视为矩阵的“特征”。PCA中的主成分指的是特征向量,对应特征值的大小表示这个特征向量或主成分的重要性。特征值越大,重要性越高,越应该优先使用这个主成分,用这个主成分对原始数据进行变换。

我们先来看看如何计算给定矩阵的特征值和特征向量,完成PCA剩下的步骤。计算特征值的推导过程如下:

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

其中,

矩阵的特征:主成分分析(PCA)

这是单位矩阵。对于上述推导的最后一步,需要计算矩阵的行列式:

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

最后,通过解这个方程,我们可以得到各种

矩阵的特征:主成分分析(PCA)

解,这些解是特征值。计算出特征值后,我们可以把不同的

矩阵的特征:主成分分析(PCA)

价值替代

矩阵的特征:主成分分析(PCA)

得到特征向量。

4.根据特征值的大小选择主特征向量。

假设我们得到

矩阵的特征:主成分分析(PCA)

特征值和相应的特征向量,将有:

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

根据相应的

矩阵的特征:主成分分析(PCA)

数值的大小,为此

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

排序。排名第一

矩阵的特征:主成分分析(PCA)

是最重要的特征向量。假设我们只拿

矩阵的特征:主成分分析(PCA)

每个特征的中间和前面

矩阵的特征:主成分分析(PCA)

最重要的特征,然后我们用这个

矩阵的特征:主成分分析(PCA)

一个特征向量,组成一个。

矩阵的特征:主成分分析(PCA)

维度矩阵

矩阵的特征:主成分分析(PCA)

。将包含原始数据。

矩阵的特征:主成分分析(PCA)

维度矩阵

矩阵的特征:主成分分析(PCA)

左乘法矩阵

矩阵的特征:主成分分析(PCA)

,可以重拾一个。

矩阵的特征:主成分分析(PCA)

维度矩阵,从而达到降维的目的。

有时候,我们无法确定

矩阵的特征:主成分分析(PCA)

多少合适。一个常见的做法是看之前

矩阵的特征:主成分分析(PCA)

特征值之和是所有特征值之和的百分比。假设有10个特征值,其和为100,最大特征值为80,那么第一个特征值占总特征值的80%,所以我们认为它可以代表80%的信息。如果不够,我们继续看第二大特征值,是15,前两个特征值之和是95,占95%。如果我们觉得够了,只能选择前两个。

所有这些描述可能都有一些抽象。我们来试一个具体的案例。假设我们有一个样本集,包含三个样本,每个样本都有三维特征。

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

,对应的矩阵如下:

矩阵的特征:主成分分析(PCA)

标准化的时候要注意,我们的分母都是用的。

矩阵的特征:主成分分析(PCA)

而不是

矩阵的特征:主成分分析(PCA)

这是为了与Python中sklearn库的默认实现保持一致。首先,我们需要得到标准化的数据。第一维特征的数据是

矩阵的特征:主成分分析(PCA)

,平均值为

矩阵的特征:主成分分析(PCA)

,方差为

矩阵的特征:主成分分析(PCA)

。因此,标准化后的第一维特征的数据为

矩阵的特征:主成分分析(PCA)

,

矩阵的特征:主成分分析(PCA)

,

矩阵的特征:主成分分析(PCA)

。以此类推,就可以得到二维和三维特征的标准化数据。当然,所有手工计算的工作量都不小。这时候计算机就可以做它擅长的事情了:重复计算。清单14-1显示了如何标准化样本矩阵的数据。

清单14-1矩阵标准化

import numpy as npfrom numpy import linalg as LAfrom sklearn.preprocessing import scale# 原始数据,包含了3个样本和3个特征,每一行表示一个样本,每一列表示一维特征x = np.mat([[1, 3, -7], [2, 5, -14], [-3, -7, 2]])# 矩阵按列进行标准化x_std = scale(x, with_mean=True, with_std=True, axis=0)print('标准化后的矩阵:\n', x_std, '\n')

其中,scale函数使用

矩阵的特征:主成分分析(PCA)

,意思是将列标准化,因为在目前的矩阵排列中,每一列代表一个特征维度,需要注意。如果矩阵排列中的每一行都代表一个特征维度,则可以使用

矩阵的特征:主成分分析(PCA)

使行标准化。最终的标准化矩阵如下所示:

矩阵的特征:主成分分析(PCA)

接下来是协方差的计算。第一维向量的方差为

矩阵的特征:主成分分析(PCA)

。第二维向量和第二维向量之间的协方差是

矩阵的特征:主成分分析(PCA)

。以此类推,我们可以得到一个完整的协方差矩阵。同样,为了减少计算工作量,协方差矩阵是用代码清单14-2得到的。

清单14-2获取协方差矩阵

# 计算协方差矩阵,注意这里需要先进行转置,因为这里的函数是看行与行之间的协方差x_cov = np.cov(x_std.transpose())# 输出协方差矩阵print('协方差矩阵:\n', x_cov, '\n')

与sklearn中的标准化函数标度不同,numpy中的协方差函数cov除以

矩阵的特征:主成分分析(PCA)

,而不是

矩阵的特征:主成分分析(PCA)

。最终协方差矩阵如下:

矩阵的特征:主成分分析(PCA)

然后,我们要求求解协方差矩阵的特征值和特征向量:

矩阵的特征:主成分分析(PCA)

通过求解行列式,我们可以得到:

矩阵的特征:主成分分析(PCA)

最后,它被简化为:

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

因此

矩阵的特征:主成分分析(PCA)

有三个近似解,分别是0,0.0777,4.4223。对于特征向量的求解,如果手工计算比较繁琐,我们还是用Python语言直接求特征值和对应的特征向量,如清单14-3所示。

清单14-3获取协方差矩阵

# 求协方差矩阵的特征值和特征向量eigVals, eigVects = LA.eig(x_cov)print('协方差矩阵的特征值:', eigVals)print('协方差矩阵的特征向量(主成分):\n', eigVects, '\n')

我们可以得到三个特征值及其对应的特征向量,如表14-2所示。

表14-2特征值和特征向量

特征值

特征向量(主成分)

4.42231151e+00

矩阵的特征:主成分分析(PCA)

3.76638147 e16

矩阵的特征:主成分分析(PCA)

7.76884923 e-02

矩阵的特征:主成分分析(PCA)

注意Python代码输出的特征向量是列向量,而表14-2中列出的是行向量。我们继续用下面的代码来寻找最大特征值的特征向量,也就是最重要的主分量,然后用这个主分量来变换原始样本矩阵,如清单14-4所示。

清单14-4找到主成分并转换原始矩阵。

# 找到最大的特征值,及其对应的特征向量max_eigVal = -1max_eigVal_index = -1for i in range(0, eigVals.size): if eigVals[i] > max_eigVal: max_eigVal = eigVals[i] max_eigVal_index = i eigVect_with_max_eigVal = eigVects[:, max_eigVal_index]# 输出最大的特征值及其对应的特征向量,也就是第一个主成分print('最大的特征值:', max_eigVal)print('最大特征值所对应的特征向量:', eigVect_with_max_eigVal)# 输出转换后的数据矩阵。注意,这里的3个值表示3个样本,而特征从3维变为1维了print('转换后的数据矩阵:', x_std.dot(eigVect_with_max_eigVal), '\n')

显然,最大特征值是4.42231150725755,对应的特征向量是[0.5807280.57869999 0]。转换后的样本矩阵为:

矩阵的特征:主成分分析(PCA)

矩阵已经从最初的三个特征维度减少到一个特征维度。Python的sklearn库也实现了PCA。我们可以通过清单14-5来尝试一下。

清单14-5找到主成分并转换原始矩阵。

import numpy as npfrom sklearn.preprocessing import scalefrom sklearn.decomposition import PCA# 原始数据,包含了3个样本和3个特征,每一行表示一个样本,每一列表示一维特征x = np.mat([[1, 3, -7], [2, 5, -14], [-3, -7, 2]])# 矩阵按列进行标准化x_std = scale(x, with_mean=True, with_std=True, axis=0)print('标准化后的矩阵:\n', x_std, '\n')# 挑选前2个主成分pca = PCA(n_components=2)# 进行PCA分析pca.fit(x_std)# 输出转换后的数据矩阵。注意,这里的3个值表示3个样本,而特征从3维变为1维了print('方差(特征值): ', pca.explained_variance_)print('主成分(特征向量)\n', pca.components_)print('转换后的样本矩阵:\n', pca.transform(x_std))print('信息量: ', pca.explained_variance_ratio_)

在这段代码中,我们将输出主成分设置为2,也就是说,挑出前两个最重要的主成分。因此,变换后的样本矩阵具有两个特征维度:

矩阵的特征:主成分分析(PCA)

sklearn的PCA除了输出主成分和转换矩阵外,还提供信息数据,输出如下:

信息量: [0.98273589 0.01726411]

它是各主成分方差的比例,表示第一主成分包含了原样本矩阵中98.27%的信息,而第二主成分包含了原样本矩阵中1.73%的信息。可以想象,最后一个主成分提供的信息少得可以忽略。如果认为95%以上的信息就足够了,那就只能保留第一主成分,将原始样本矩阵的特征维数降低到一维。

14 . 1 . 2 PCA背后的核心思想

当然,更高层次的学习不仅要“知其然”,更要“知其所以然”。现在即使你对PCA的操作步骤了如指掌,可能还是会有一些疑惑。比如我们为什么要用协方差矩阵?这个矩阵的特征值和特征向量代表什么?为什么选择特征值最大的主成分可以覆盖最大的信息量?别急,这个我们会解释的更透彻,让你不仅明白怎么做PCA,还明白为什么要做。

1.为什么要用协方差矩阵?

首先,首先要回答的问题是,我们为什么要利用样本数据中各个维度之间的协方差来构造新的协方差矩阵?要理解这一点,首先要回到PCA的终极目标:降维。降维就是去掉那些表达信息量少或者冗余的维度。首先,我们来看看如何定义一个维度中的信息量。这里我们认为样本在某个特征维度上的差异越大,这个特征所包含的信息量就越大,也就越重要。反之,信息量越小,就需要过滤掉。自然可以想到用某一维特征的方差来定义样本在这个特征维上的差异。此外,我们需要看到如何找到冗余信息。如果两个特征有很高的相关性,那么我们就可以从一个维度的值计算出另一个维度的值,这两个特征所表达的信息是重复的。第二章“概率与统计”介绍了许多变量之间的相关性,但在实际应用中,我们可以用皮尔逊相关系数来描述两个变量之间的线性相关性。该系数的取值范围为[1.0,1.0]。绝对值越大,相关性越强。正数表示正相关,负数表示负相关。图14-1显示了正相关和负相关的含义。左边的

矩阵的特征:主成分分析(PCA)

曲线和

矩阵的特征:主成分分析(PCA)

曲线有一个非常近似的变化趋势,当

矩阵的特征:主成分分析(PCA)

当它升起的时候,

矩阵的特征:主成分分析(PCA)

它也趋向于上升,

矩阵的特征:主成分分析(PCA)

当它下降时,

矩阵的特征:主成分分析(PCA)

也趋于减少,说明两者之间有很强的正相关关系。右侧的

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

相反,当

矩阵的特征:主成分分析(PCA)

当它升起的时候,

矩阵的特征:主成分分析(PCA)

它倾向于下降,

矩阵的特征:主成分分析(PCA)

当它下降时,

矩阵的特征:主成分分析(PCA)

趋于上升,说明两者有很强的负相关关系。

矩阵的特征:主成分分析(PCA)

图14-1两个变量的正负相关性

使用相同的矩阵符号,皮尔逊系数的计算公式如下:

矩阵的特征:主成分分析(PCA)

其中,

矩阵的特征:主成分分析(PCA)

表示向量维数,

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

两个特征尺寸分别为。

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

在第一

矩阵的特征:主成分分析(PCA)

样本数量。

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

分别代表所有样本在两个特征维度上的平均值,

矩阵的特征:主成分分析(PCA)

矩阵的特征:主成分分析(PCA)

代表所有样本在两个特征维度上的标准偏差。让我们稍微改变一下皮尔逊系数的公式来观察皮尔逊系数和协方差之间的关系:

矩阵的特征:主成分分析(PCA)

从上式可以看出,改变的分子就是协方差。分母和标准化数据中的分母相似。所以本质上,皮尔逊相关系数与数据标准化后的协方差是一致的。考虑到协方差不仅可以度量信息量,还可以度量不同维之间的相关性,所以我们用各个维之间的协方差组成的矩阵作为PCA的对象。如上所述,这个协方差矩阵主对角线上的元素是各个维度的方差,反映的是信息量,其他元素是两个维度之间的协方差,反映的是相关性。既然协方差矩阵提供了我们需要的方差和相关性,那么下一步就是考虑如何操作这个矩阵。

2.为什么要计算协方差矩阵的特征值和特征向量?

我们可以从两个角度来理解这一点。

第一个角是对角矩阵。所谓对角矩阵,是指矩阵只有主对角线以上的元素有非零值,而其他元素的值都是0。我们刚刚解释了协方差矩阵主对角线上的元素都是代表信息量的方差,其他元素是代表相关性的协方差。既然要尽可能的保留大信息量的维数,去掉相关维数,就意味着要对角化协方差,使得只有矩阵的主对角线上有尽可能多的非零元素。如果我们真的能尽可能地将矩阵对角化,那么对于对角化的矩阵,其主对角线上的元素是或者接近矩阵的特征值,特征值本身就代表了转换后的方差,也就是信息量。此时对应的特征向量基本正交,即相关性很弱甚至没有相关性。

第二个角度是特征值和特征向量的几何意义。我们之前提到过,在向量空之间的空间中,一个矩阵乘以一个左向量,其实就是这个向量的一个变换。在这个变换的过程中,左乘向量主要经历两个变换:旋转和膨胀。如果左乘法矩阵只对某个向量或某些向量产生伸缩变换,而对这些向量不产生旋转效应,那么这些向量称为这个矩阵的特征向量,伸缩比就是特征值。换句话说,矩阵的特征向量表示矩阵在空中的变换方向。这些方向往往是正交的,特征值表示每个方向上的缩放比例。如果一个特征值很大,说明对应的特征向量所指示的方向有很大的伸缩范围。这也是为什么我们需要用原始数据把这个特征向量向左相乘得到降维后的新数据的原因。因为这样做可以帮助我们找到一个方向,让它最大限度的包含原有的信息。需要注意的是,这个新方向往往并不代表原有的特征,而是多个原有特征的组合和缩放。

从那以后,内容就从《程序员基础数学课程:从理论到Python实践》中摘录出来了。

矩阵的特征:主成分分析(PCA)

本书贴近计算机领域,从程序员的需求出发,精心挑选程序员真正能用到的数学知识,通过生动的案例解读知识中的难点,让程序员更容易针对实际问题建立数学模型,从而构造出更优化的算法和代码。

本书分为三个模块:“基本思想”梳理了编程中常用的数学概念和思想,不仅由浅入深地讲解了数据结构和数学中的基础和核心数学知识,还阐明了数学对编程和算法的真正意义;“概率统计”一章以概率统计的核心——贝叶斯公式为基础,向上解释随机变量和概率分布、向下解释朴素贝叶斯等基本概念,分析其在生活和编程中的实际应用,使读者真正理解概率统计的本质,弥合概念与应用之间的鸿沟。《线性代数》从线性代数中的向量、矩阵、线性方程等核心概念入手,逐步分析这些概念是如何与计算机结合起来解决实际问题的。除了理论知识的阐述,本书还通过Python语言分享了通过大量实践积累的宝贵经验和代码,让读者学到有用的东西。

这本书的内容从概念深入到应用,再到本质。它不仅注重培养读者良好的数学思维,还努力使读者的编程技能更高级。非常适合想从本质上提高编程质量的中级程序员阅读学习。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/49686.html

发表回复

登录后才能评论