30-什么是 PCA

回顾

  上一章主要是系统的学习了梯度下降法,梯度下降法主要是寻找一个目标函数它相应的一个最优解的方式,不管是寻找损失函数的最小值,还是寻找效用函数的最大值。那么这一章主要是学习另外一种梯度的应用,就是应用在主成分分析上。


主成分分析(PCA)

  主成分分析是一种非常有名的算法,这个算法本身不仅仅应用在机器学习领域,也是统计学领域一个非常重要的方法。主成分分析法我们又简称为 PCA(Principal Component Analysis)。

  PCA 是一个非监督的机器学习算法,它的作用主要用于数据的降维。对于降维这个作用来说,它本身的意义也是非常重要的,除了显而易见的,我们通过降维肯定能够提高算法的效率之外,同时通过降维我们也可以更方便的进行可视化,以便于我们人类可以更好的去理解数据。另外,PCA 还有一个很重要的作用就是去噪,有一些时候通过对一些数据进行去噪,再用于机器学习的算法,相应的识别率可能会更好。

  那么,下面我们来看看什么是主成分分析?

  我们说了 PCA 的主要作用是降维。我们给基于这一点,先来理解一下 PCA 的原理。

  下图中我展示了一个二维平面,横轴和纵轴代表两个特征,每一个圆点代表一个样本。

在这里插入图片描述
  想象一下,我们这是一个二维的特征的样本,如果给它降维的话,显然可以降到一维,那么怎么将它降到一维呢?一个显而易见的方法就是在这两个特征中选一个特征,把另外一个特征扔掉。比如说,我们选特征1,把特征 2 扔掉的话,这些点相应的就会全部映射到 x x x 轴上。
在这里插入图片描述

  这样降维后,我们的样本最终就会变成这个样子。
在这里插入图片描述
  同理,如果我们降维扔掉特征 1,而保留特征 2 的话,那么相应的所有的点都映射到 y y y 轴上。
在这里插入图片描述
  现在我们已经有了两种降维方式,我们比较一下来看:
在这里插入图片描述
  此时,可以判断一下,哪一种方式是更好的方案呢?相信此时大家都会觉得右边的方案是一种更好的方案。因为我们将所有的点都映射在了 x 轴上,映射完之后,可以看到点和点之间的距离相对是比较大的,也就是说,点和点之间相应的拥有更高的可区分度。同时,它们之间的距离相对比较大,也更好的保持了原来的点和点之间的距离。

  而左侧的方案可以看出来,点和点之间更密了,这和原来的点和点之间的分布相应而言差异更加的大,所以如果让我们选择一种方案把原来的数据从二维降到一维,我们显然会选择右侧的方案。那么问题来了,这种方案是最好的方案吗?换句话说,我们有没有比这种方案更好的一种方案呢?

  可以再观察一下,我们原来的样本是这个样子:
在这里插入图片描述
  现在我们希望将它从二维平面降到一维平面,是不是存在一根直线,这根直线其实是斜着的。如果我们将所有的点映射到这根直线上:
在这里插入图片描述
  我们的数据点也就变成了这样:
在这里插入图片描述
  感觉一下,是不是它们之间整体和原来的样本之间的分布并没有大的差距。与此同时,所有的这些点都在一个轴上,虽然这个轴是斜着的,我们也可以把它理解成是一个轴,也就是一个维度。用这种方式,我们将所有的点从二维降到了一维。可以想象一下,使用这种方式,所有的点更加趋近于原来的这些点它们的分布情况,换句话说,点和点之间的距离此时比它无论是映射到 x x x 轴,还是映射到 y y y 轴,它们的间距都更加的大,这样它们之间的区分度也更加的明显。那么我们的问题也就相应的变成了如何找到这个让样本间间距最大的轴

  我们为了找到这样的轴,我们首先得定义样本间间距,那么我们使用什么样的指标来定义这个样本间的间距?事实上,在统计学中,有一个指标可以直接来定义样本间间距,就是方差(Variance),它是描述样本整体分布的疏密这样的一个指标,那么方差越大,代表样本之间越稀疏,方差越小,代表样本之间越密集。那么方差的表示方式如下:
在这里插入图片描述
  那么我们知道了方差可以作为样本间距离的指标的话,那么问题就又变成了:找到一个轴,使得样本空间的所有点映射到这个轴后,方差最大
在这里插入图片描述
  为了解决这个问题,在进行 PCA 之前,我们要进行以下步骤:

  第一步就是 demean:将所有的样例的均值归为 0,其实就是所有的样本都减去样本整体的均值。如下图所示,样本的分布是没有改变的,其实我们只是把坐标轴进行了移动,使得我们的样本在每一个维度的均值都是 0。
在这里插入图片描述
  那么既然我们的均值都为 0 了,那么我们方差的式子就可以相应写成:

在这里插入图片描述
  所以这就是我们为什么要进行 demean 的这一步了。为的就是可以将方差的式子进行简化,更加的方便。在这里需要注意,在式子中的 x i x_i xi 是所有的样本点已经映射在了一个新的坐标轴上之后得到的新的样本,这个轴由于在我们的图示中只有两个维度,我们就可以将其叫做 ( w 1 , w 2 ) (w_1, w_2) (w1,w2)

  总结一下,PCA 首先是对所有的样本进行 demean 处理,然后我们想要求一个轴的方向 w = ( w 1 , w 2 ) w = (w_1, w_2) w=(w1,w2),使得我们所有的样本,映射到 w w w 之后,使得:

在这里插入图片描述
  这里有两点需要注意,第一点我是用的是大写的 X X X,那么对于 X X X 来说,它可能有 n n n 个维度, 在我们的例子里,它有两个维度,即使有两个维度,每一个样本本身也是一个包含有两个数的这样一个向量,所以更准确的说这个平方的和应该写成如下形式:

在这里插入图片描述
  其实是一个向量减去另外一个向量得到一个新的向量,这个新的向量的模对应的平方,这样的平方和达到最大,由于我们进行了 d e m e a n demean demean 处理,其实这里 X X X 的均值是等于 0 的。其实我们最终求的就是这样一个式子:
在这里插入图片描述
  下面我们就来看看怎样使得这个平方和最大?这里我们主要处理一下 X_project 到底是什么?我们怎么用原来的样本 X 得到这个 X_project,我们来看映射的过程,我假设这根红线是我们要找的 ( w 1 , w 2 ) (w_1, w_2) (w1,w2)

在这里插入图片描述

  每一个样本点如果是样本的第 i i i 行的话,相应的我们可以用:

在这里插入图片描述
  这里注意, X i X^i Xi 其实也是一个向量,下面我们绘制一个方向来表示 X i X^i Xi 所在的向量:

在这里插入图片描述
  那么,现在这个 X i X^i Xi 要映射到 w 这个方向上,就是向 w w w 表示的轴做一根垂直的直线。

在这里插入图片描述
  有一个交点,那么交点的位置记作:
在这里插入图片描述
  现在我们真正要求的:
在这里插入图片描述
  其实就是这根蓝色的轴它的长度对应的平方。

在这里插入图片描述
  其实我们要求把一个向量映射到另外一个向量上,对应的这个映射的长度是多少?实际上这种映射就是点乘的定义:

在这里插入图片描述
  两个向量的点乘就是这两个向量的模乘以这两个向量之间的夹角的余弦值。现在我们要找的 w w w 是一个方向,换句话说,我们用方向向量来表示,所以 ∣ ∣ w ∣ ∣ = 1 ||w|| = 1 w=1,所以我们的式子就可以化简成:

在这里插入图片描述
  此时,可以看一下 ∣ ∣ X i ∣ ∣ ||X^i|| Xi 是谁?就是 X i X^i Xi 这个箭头对应的长度。让它再乘以 c o s θ cosθ cosθ,乘完之后恰恰就是蓝色这根向量它的长度。

在这里插入图片描述
  这里所求得的长度就是我们要求的

在这里插入图片描述
  所以我们就推导出来了下列这个式子:

在这里插入图片描述
  此时我们的方差的式子就可以化简成:

在这里插入图片描述
  其实,这里不应该用取模这个符号了,因为两个向量进行点乘得到的是一个数,那么我们的目标就变成了:

在这里插入图片描述

  在这里, X i X^i Xi w w w 分别是两个向量,之前的例子都是二维的向量,当我们将其拓展到 n n n 维的情况下,展开之后得到:

在这里插入图片描述
  我们的 PCA 至此就化简成了一个目标函数的最优化问题,要求它的最大值,我们就可以使用梯度上升法解决。后面我们主要使用搜索的策略来求解 PCA,这样对梯度上升法和梯度下降法就会有更加深刻的认识。

  在最后,想提到一个问题,很多小伙伴单看这幅图可能会觉得和线性回归有很多相似的地方。

在这里插入图片描述

  在这里一定要注意它们之间的差别。在上面这幅图中,横纵坐标代表的是两个特征,但是在我们的线性回归问题(下图)中,我们的横轴是特征,纵轴是输出标记。
在这里插入图片描述
  其实我们寻找的是一根直线使得输出标记和我们原来所有的点用同样的特征值找到相应的直线上的点,它和输出标记之间的均方误差(MSE)尽量小,在二维图中,这些线是垂直我们的 x 轴的,也就是特征所代表的这个轴上,而不是垂直于我们的这根线的。

在这里插入图片描述
  虽然 PCA 和线性回归它们都拥有一根直线之间的关系,但是这个关系是不同的。


  这篇博客到这里就结束了,这里主要介绍了 PCA 主要的思路,我们将这样一种降维的问题转换成了求一个目标函数最大值的问题。下一篇博客就推导一下,如果我们使用梯度上升法来解决求这个目标函数最大值的问题的话,我们得到的结论是怎样的?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCA+SVM手写数字识别的实现步骤如下: 1. 数据预处理:将手写数字图像转换为数字向量,这个数字向量就是我们要输入到PCA和SVM模型中的数据。 2. 特征提取:使用PCA算法对数字向量进行降维处理,将高纬度的数据降维到低维度,这样可以减少数据的维度,提高SVM模型的训练速度,同时也可以去掉数据中的噪声和冗余信息。 3. 模型训练:使用SVM算法对降维后的数字向量进行分类训练,训练出一个分类器,能够将输入的数字向量正确地分类为0~9中的一个数字。 4. 模型测试:使用测试数据集对训练好的分类器进行测试,计算准确率和召回率等指标,评估分类器的性能。 在实现过程中,我们可以使用Python的sklearn库来实现PCA和SVM算法。具体实现步骤如下: 1. 数据预处理:将手写数字图像转换为数字向量,可以使用sklearn自带的手写数字数据集,也可以自己制作数据集。 2. 特征提取:使用sklearn中的PCA算法对数字向量进行降维处理,得到降维后的数字向量。代码如下: ``` from sklearn.decomposition import PCA pca = PCA(n_components=30) # 设置降维后的维度为30 train_X_pca = pca.fit_transform(train_X) test_X_pca = pca.transform(test_X) ``` 3. 模型训练:使用sklearn中的SVM算法对降维后的数字向量进行分类训练,得到训练好的分类器。代码如下: ``` from sklearn.svm import SVC from sklearn.metrics import accuracy_score svm_model = SVC(kernel='rbf', C=1.0, gamma='auto') # 设置SVM的参数 svm_model.fit(train_X_pca, train_y) # 训练SVM分类器 ``` 4. 模型测试:使用测试数据集对训练好的分类器进行测试,计算准确率和召回率等指标,评估分类器的性能。代码如下: ``` test_y_pred = svm_model.predict(test_X_pca) accuracy = accuracy_score(test_y, test_y_pred) # 计算准确率 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值