主成分分析PCA和矩阵的奇异值分解SVD

PCA和SVD

  引言:在机器学习中,因为高纬空间样本具有稀疏性,导致模型比较难找到数据特征等原因。所以需要进行高维数据样本的降维,其中比较常使用的一种降维方法就是PCA。PCA主要是用于数据的降维,将高维的样本数据降维到低维。因为其在降维的过程中,综合了样本中各个特征的属性数据,所以降维后的样本数据仍然很好的保存了原始样本数据的信息,同时维度降低了(可以理解为,样本的属性减少,新的维度属性综合了之前所有样本的属性)。另一方面,与PCA紧密相关的另一个算法叫做SVD,它不仅能够用于数据的降维还可以用于去除掉样本数据中的噪声信息。

一.PCA

 (一). 一个关于PCA的引例

  首先,我们看这样的一个例子,图中有一个甜麦圈。

[1].甜麦圈用矩阵表示

  从图[1]中可以看到,在三维空间中,它可以看做是无数点堆积而成,而每一个点都可以用一个三维的向量来表示,所以在三维空间中甜麦圈它就可以由这么一个三维矩阵来描述出它的形状。
在这里插入图片描述
[2].投影后的甜麦圈用二维信息表示出来

  这个时候,在三维空间中我们用手电去照射这个甜麦圈,可能在墙上留下不同的阴影信息,根据有的墙面阴影信息我们能很清楚的看出被投影的物体是什么,有的墙面的影子则完全不能分辨出被投影的物体。我们就可以想象!对于这样的甜麦圈,如果我们要去识别它,是否不需要利用它的三维信息,而只利用到它某些投影方向的二维信息就好了,比如说这面墙(图[2]有箭头的那面墙)的信息。这样我们不仅能很好的识别出为甜麦圈,而且还能降低甜麦圈数据的维度。
  所以对于那些大数据,计算机视觉,机器学习领域的高维数据也是如此,由于各变量间存在一定的相关(线性)关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息,这就是数据降维的深层原因。

 (二). PCA的样例:二维数据解释

   为了方便讲解PCA的原理,这里我们先采用具有两个维度的数据。如下图所示:
在这里插入图片描述

[3].二维样本数据

   这些数据服从高斯分布,落在二维的坐标轴上,这些数据就形成了一个椭圆形状的点阵。椭圆有一个长轴和一个短轴,在短轴方向上,我们可以看到数据变化较少;如果在极端的情况下,短轴就退化成一点,那么只有在长轴的方向才能够解释这些点的变化了。于是,样本数据就从二维降维到一维了。根据最大方差理论,也就是方差越大,信息量越多,(即信息量损失就最小),降维后的样本数据就越接近原始样本数据。为了将二维的数据降维到一维保存,我们就需要让样本点往样本属性间方差最大的方向投影,也就是往最能看出样本之间数据变化的方向投影。很明显图中向横轴方向的投影结果是最好的。因此横轴就是我们需要找出的投影方向。
   但是在实际中遇到的数据可能并不像刚才那样就能很直接的找到投影方向。如图中所示
在这里插入图片描述

[4].找更好的投影方向

   这些数据点向X1X_{1}X1轴投影达不到很好的效果,向X2X_{2}X2轴投影也不能达到很好的效果,那么我们就需要去找出更好的投影方向Y1Y_{1}Y1
  那么怎么去找呢?首先要对这些样本进行数据中心化操作。
在这里插入图片描述

[5].样本数据的中心化

  比如给定的一组样本数据,它们分别用向量Z1⃗\vec{Z_{1}}Z1 ,Z2⃗\vec{Z_{2}}Z2 Zm⃗\vec{Z_{m}}Zm 表示出来。首先求出数据的中心位于u⃗\vec{u}u ,然后每个向量分别减去中心向量u⃗\vec{u}u ,就可以把样本数据中心化,用新的向量形式X1⃗\vec{X_{1}}X1 ,X2⃗\vec{X_{2}}X2 Xm⃗\vec{X_{m}}Xm 表示出来了 。

  经过数据中心化后的样本集,我们可以看到如下图所示,

在这里插入图片描述

[6].坐标轴平移到数据中心

   相当于以前的坐标轴X1X_{1}X1,X2X_{2}X2 平移到了数据中心。接着我们就需要去找出真正的投影方向Y1Y_{1}Y1.

 (三). PCA的原理:关于PCA的数学求解过程

   经过刚才的数据中心化,我们可以得到中心化后的样本数据矩阵Xm×nX_{m×n}Xm×n
在这里插入图片描述

[7].样本数据矩阵Xm×nX_{m×n}Xm×n

   刚才我们说过投影最好的方向是投影后越接近原始样本数据的方向,(也就是投影后原来的信息保存得更好的方向)。同时也是样本属性间方差最大的方向。
在这里插入图片描述
                              [8].样本点xkx_{k}xk向假想的投影轴e方向投影

   图中可以看到,样本点 xkx_{k}xk 向投影轴 eee 投影后得到了xk′x_{k}^{'}xk在。这里,我们需要求出的就是这个投影轴方向eee。这儿的 xkx_{k}xkxk′x_{k}^{'}xk 均为向量。

  根据上面的投影,我们先列出这么一个公式,
在这里插入图片描述

[9].样本点和投影点之间的距离

  投影后的样本点 xk′x_{k}^{'}xk 减去原始样本xkx_{k}xk 的距离等于 J(e)J(e)J(e)这么一个函数,他的自变量就为投影轴方向 eee
  首先我们来看一下这个公式
  (1).公式中的第二行:我们对公式中的 xk′x_{k}^{'}xk,用 aka_{k}ak 乘以这个投影轴单位向量 eee 来替换(图[8]有aka_{k}ak = ete^{t}et xkx_{k}xk),其中 aka_{k}ak 是一个标量。
  (2).公式中的第三行:接着我们展开这个公式,看到第三行,首先 “第一块” 因为单位向量的模长为1,所以它模长的平方也等于1。然后看到第二块这儿, eee 乘上xktx_{k}^{t}xkt可以用 aka_{k}ak替换掉(标量的转置还是等于其本身,然后前面的和后面的相减。就可以等于第四行这个公式。
  (3).公式中的第四行:又由于,aka_{k}ak 等于eee 乘上 xktx_{k}^{t}xkt,所以我们就把它代入进去替换掉 aka_{k}ak
   然后就得到了第五行这个公式。

   我们刚才说过投影方向最好的方向为保存原始信息最好的方向,在这儿也就是投影之后的点与原始样本点距离最小的方向,也就是 J(e)J(e)J(e) 取最小的时候。所以投影样本点xk′x_{k}^{'}xk和原始样本xkx_{k}xk 之间的距离 J(e)J(e)J(e) 函数就可以用来度量这个投影的好坏。
在这里插入图片描述

[10].样本点和投影点之间的距离

  我们可以看到什么时候J(e)J(e)J(e) 取最小呢?因为后面这一块(蓝色的圈 圈出来的部分)始终为原始样本的模长之和,所以大小恒等不变。那么要J(e)J(e)J(e) 取最小,前面负的这一块(红色的圈 圈出来的部分)就要最大。

  我们仔细一点发现,前面这块求和后(红色的圈 圈出来的部分)的结果其实就是一个矩阵,而这个矩阵就是样本的散度矩阵。也就是等于样本特征属性数据的协方差矩阵乘上(m-1)。[m为样本的个数]
  补:在机器学习模式识别中,经常需要应用到协方差矩阵和散布矩阵。如在PCA主成分分析中,需要计算样本的散度矩阵,有的论文是计算协方差矩阵。实质上二者意义差不多,散布矩阵(散度矩阵)前乘以系数1/(m-1)就可以得到协方差矩阵了。
  散布矩阵的大小由特征维数d决定

关系:散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(m-1)

在这里插入图片描述

[11].类间散度矩阵

  在这里我们发散一下,离开PCA的主线求解,看一下这个协方差矩阵和散度矩阵的关系。我把样本矩阵、散度矩阵、样本属性的协方差矩阵的关系做了如下图:
在这里插入图片描述

[12].从样本矩阵得到的散度矩阵和协方差矩阵的关系

  看完了协方差矩阵和散度矩阵的关系,我们接着回到PCA的主线求解过程中来。

<think>嗯,用户问的是主成分分析PCA奇异值分解SVD)分别是什么。首先,我需要先回忆一下这两个概念的基本定义它们在数据科学中的应用场景。 PCA是一种常用的技术,主要用于减少数据集的度,同时保留尽可能多的信息。它的核心思想是通过线性变换将原始数据投影到方差最大的方向(即主成分)上。这样做的目的是为了去除数据之间的相关性,并且找到数据中最主要的特征。通常,PCA的实现步骤包括标准化数据、计算协方差矩阵、求特征值特征向量,然后选择前k个最大的特征值对应的特征向量作为主成分,最后将数据转换到新的空间。 而SVD是一种矩阵分解方法,可以将任意矩阵分解为三个矩阵的乘积:U、ΣV^T。其中,UV是正交矩阵,Σ是对角矩阵,对角线上的元素称为奇异值。SVD在数据压缩、、推荐系统等领域有广泛应用。比如,在PCA中,实际上可以通过SVD来实现,因为协方差矩阵的特征分解可以转化为对数据矩阵SVD分解,这在计算上更为高效,尤其是在处理高数据时。 接下来,我需要考虑用户可能的背景需求。用户可能正在学习机器学习或数据分析,需要理解这两个方法的区别联系。他们可能想知道在什么情况下使用PCA,什么时候使用SVD,或者两者如何结合使用。此外,用户可能希望看到具体的代码示例,以便更好地理解它们的应用。 对于代码部分,我需要用Python展示如何使用PCASVD进行。比如,使用scikit-learn库中的PCA类,以及numpy的svd函数。同时,需要解释代码的每一步骤,确保用户能够理解参数设置结果的意义。 在解释时,要强调PCASVD的关系,例如PCA可以通过SVD来实现,但两者的应用场景有所不同。PCA主要用于特征提取,而SVD的应用更广泛,包括矩阵分解、数据压缩等。此外,SVD不需要计算协方差矩阵,因此在处理大规模数据时可能更高效。 最后,用户可能还想知道如何选择主成分的数量,或者如何处理非线性的数据,这时候可能需要提到其他方法如核PCA或t-SNE。但根据当前问题,我需要集中在PCASVD本身。 总结回答的结构:先分别介绍PCASVD,然后给出代码示例,解释代码,接着说明它们的联系区别。最后提出相关问题,如比较其他方法、具体应用场景、数学原理等。</think>主成分分析PCA奇异值分解SVD)是两种重要的线性代数技术,在机器学习数据分析中广泛应用。以下是详细解释代码示例: --- ### **主成分分析PCA)** **定义**:一种无监督方法,通过正交变换将原始特征转换为一组线性无关的主成分,目标是保留最大方差方向。 **代码实现(Python)**: ```python from sklearn.decomposition import PCA import numpy as np # 创建示例数据(4个样本,3个特征) X = np.array([[2.5, 2.4, 0.5], [0.5, 0.7, 0.3], [2.2, 2.9, 0.2], [1.9, 2.2, 0.1]]) # 初始化PCA到2个主成分 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) print("主成分方向:", pca.components_) print("后数据:\n", X_pca) ``` **代码解释**: - `PCA`类通过计算协方差矩阵的特征向量实现 - `n_components`指定保留的主成分数量 - `components_`属性输出主成分方向向量 - `fit_transform`返回后的数据矩阵 --- ### **奇异值分解SVD)** **定义**:将任意实数矩阵分解为三个矩阵的乘积:$A = U \Sigma V^T$,其中$U$$V$是正交矩阵,$\Sigma$是对角矩阵。 **代码实现(Python)**: ```python import numpy as np # 创建示例矩阵 A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 执行SVD分解 U, S, Vt = np.linalg.svd(A) print("U矩阵:\n", U) print("奇异值:", S) print("V转置矩阵:\n", Vt) ``` **代码解释**: - `np.linalg.svd`返回三个分解矩阵 - $U$矩阵的列称为左奇异向量 - $S$是包含奇异值的一数组(需转换为对角矩阵) - $Vt$是$V$矩阵的转置,其行是右奇异向量 --- ### **核心区别与联系** | 特性 | PCA | SVD | |---------------------|-------------------------|-------------------------| | 输入要求 | 需要协方差矩阵计算 | 可直接分解原始矩阵 | | 计算效率 | 高数据计算成本高 | 更高效的数值稳定性 | | 应用场景 | 明确需求 | 通用矩阵分解 | | 数学关系 | PCA可通过SVD实现 | SVD是更基础的数学工具 | --- ### **实际应用中的选择建议** - 当需要明确的可解释性时选择PCA - 处理高稀疏矩阵时优先使用SVD - 推荐系统等场景直接使用SVD分解 - 文本分析(LSA)通常结合SVD使用 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值