非监督学习——PCA

来源:互联网 发布:sql group by多个字段 编辑:程序博客网 时间:2024/06/05 21:10

许多数学对象可以通过分解为更基础的组成部分而有更好的理解,因为我们会发现它们的一些广泛性属性,而不是我们选择表征他们的属性。—— 从特征分解到协方差矩阵:详细剖析和实现PCA算法

一:前言

1.1 方差(Variance)

  • 方差是概率学和统计学中用来衡量随机变量或一组数据离散程度的度量
  • 概率学中方差用来度量随机变量和其他数学期望(即均值)之间的偏离程度
  • 概率学中方差(样本方差)是单个样本值与全体样本值的平均数之差的平方值的平均数
  • 方差是衡量源数据与期望数值之间的度量值

通过方差我们可以判断一个数据集的离散程度。方差越大,数据越分散;方差越小,数据越紧密。我们怎么理解这句话呢?说的通俗一点,方差是判断一个数据集合中各个数据点与数据集合平均值的偏离程度。当方差越大的时候,说明数据集中各个点距离平均值的越远,那么意味着数据集也就越分散;越小则相反。

1.2 复合特征(Composite Features)

复合特征简单的说就是我们可以使用较少的特征来代表较多的特征。在PCA中我们将复合特征称为主要成分。这里列举一个例子来帮助大家理解这个属性。

在对房价进行预测的一个模型中,我们选择线性回归的方式来训练预测模型。那么接下来就需要我们确定输入特征了,这里我列举两组特征:第一组是房间数、建筑面积、房子周边学校的评级、房子所在社区的安全性;第二组是房子大小、社区情况。如果我们仔细思考这两组输入特征的话,你会发现——房间数、建筑面积实际上是房间大小的一种反应,而社区情况实际上是社区安全性、学校评级的一种反应。

针对上述情况,我们实际上是可以将特征进行组合来降低我们的特征数。复合特征在某种程度上我们也可以将其称为特征压缩,这种处理有个特点就是我们在保留信息(这里说的准确点应该是在尽量保证信息的情况下。严格来说,特征压缩的同时还是会有一些信息丢失的情况。)的前提下实现特征压缩。

1.3 最小信息损失

这节需要说明一个数学真相:

When we do the projection onto direction of maximal variance and only on to that direction will minimizing the distance from old(higher-dimensional) data point to the new transformed point and what this is necessarily doing is minimizing the information loss.

这句话的含义是:当我们将一个数据集映射到这个数据集的最大方差方向上的时候,那么该数据的信息损失最小。换句话说就是——当我们对一个数据集进行压缩的时候,我们希望数据集的信息损失最小,那么只需要找到这个数据集的最大方差的方向,让后将数据及映射到这个方向上,就可以了。

二:主成成分分析

PCA全称Principal Component Analysis,中文翻译:主成成分分析。从某种程度上来讲,PCA是一个特征压缩算法。针对于高纬度的输入特征(例如图片的输入特征),我们可以通过相关的PCA进行主成成分分析的提取来完成特征压缩。

在讲解之前,我这里先列出PCA相应的特点,希望在后续的讲解过程中,大家能够理解这几点:

  • 一个系统化的方式把输入特征转换为主体成分
  • 将主体成分作为新的特征
  • 当我们进行数据压缩(或者说数据投影)的时候,主体成分在数据集的最大方差上(最小信息损失)
  • 当主成分的方差越大,那么改主成分的级别越高
  • 主成分在某种程度上是垂直的,所以我们可以将这些主成分作为单独的特征使用
  • 主成分数量是有上限的:该最大值等于您在数据集中的输入特征的数量

2.1 主要成分——最大方差(Maximum Variance)

大家首先来观看如下几张图:


这里写图片描述

针对这一组数据,你有什么感想?
直观的来看,这是一组二维数据点集。但是图中的线有一个特点就是,他们可以分布在同一条直线上的。这里呢,我们移动下坐标系的位置——将x轴的位置转换为数据点所在的直线上的位置。这样我们就可以对数据进行一定的变化,将其转换为一维数据(因为他们的纵坐标都是相同的)。这样我们就可以将一个二维数据点转换为一维数据点了。

接下来我们看第二张图:


这里写图片描述

这张图与第一张图有一点不同——这个数据点集没有上一个数据点集的规整。从直观来看,我们就可以断定我们找不到一条直线能够满足所有的点。而这样的直线会在转换的过程中必然造成信息损失——Information Loss(也就是数据点的不准确)。但是我们联系实际的话,对于像图片这种少则几百位,多则上千位的数据,对于我们的训练是一种极大的挑战。如果我们能够保证在数据点的信息损失最小会怎么样呢?事实证明这是一个不错的选择,我们使信息的损失最小并不会影响我们最后的推断,相反还提高的准确率。那么接下来的问题就是,我们如何找到这样的直线了?

就下来请看第三张图:


这里写图片描述

上图中有两条红色的线,代表着两种不同情况下我们要找的新坐标的主轴。这里我们就需要用到最大方差来解决这个问题了。如果你仔细阅读过前边关于方差以及我们提到的数学真想的问题的话。你就会明白为什么我们会找最大方差了——当数据点集的方差达到最大的时候,经过映射之后的数据点集的信息损失会达到最小(具体的证明方法这里就不说了,如果有兴趣的话,大家可以直接去问度娘或者谷哥)。

PCA中将要寻找的最大方差称之为主要成分。这也就解释了我们这个算法名称的由来了。

经过前边三部的讲解,我们可以得到这样的一个结论:PCA实际上就是在寻找一个或者多个满足这样标签的超平面。当数据点映射到这样的超平面上的时候,能够是数据的损失降到最低,同时又能够实现特征压缩的功效。

2.2 方差的计算——特征值与特征向量

经过上边的讲解,大家可能对PCA有一个大概的了解。但是估计很多人会有疑惑(大多是线性代数没学好的,笔者就是其中之后,导致后来还需要恶补一下线性代数的内容)——最大方差之后一个?我们可以找出无限个不同的方差?

如果你有这样的疑问的话,建议大家先去补习一下线性代数的内容。这里有一个不错的课程推荐——麻省理工公开课——线性代数。

PCA在找平面的时候是以方差来寻找的,然后通过方差的大小来排序:方差最大的就是第一主成分,然后一次是第二主成分、第三主成分……

这个的计算的话是需要通过求相应的特征值、特征向量、协方差等。具体的理论知识这里就不再进一步的说明了,如果后续有时间的话,我再补上。

这里还说说明另外一个特点:方差的个数。如果你仔细学过并理解了特征值、特征向量的话。那么你就会知道方差的个数是由提供的数据特征决定的,数据特征有几个那么我们的方差就有几个,而具体表示是我们是以向量的方式来表示对应的方差所代表的超平面,而这些方差有个特点就是——各向量相互正交。

这里同时在提供一个例子:sklearn提供的关于人脸识别的例子,他就运用到了相应的PCA特征提取,如果有兴趣的话,大家可以看一下——人脸识别

参看文档:

  • 详细剖析和实现PCA算法