主成分分析法
主成分分析法(PCA)
参考资料:
数据降维大法–主成分分析法
1 | 主成分分析法是运用“降维”思想,把多个指标变换成少数综合指标的多元统计方法,这里的综合指标就是主成分。每个主成分都是原始变量的线性组合,彼此相互独立,并保留了原始变量绝大部分信息。其本质是通过原始变量的相关性,寻求相关变量的综合替代对象,并且保证了转化过程中的信息损失最小 。 |
前言废话篇:
什么,老板既然让我一天内分析完今年公司的经营状态??
光是公司财务数据就已经包含20+个变量,固定资产、流动资金、每一笔借贷的数额和期限、各种税费、工资支出、原料消耗、产值、利润、等等,何况公司还有其他的部门!
老板虐我千百遍,我待老板如初恋,再见了,我也该去寻找真正属于我的幸福了。可是工作做不完,晚上就没时间去寻找幸福了,作为一名专业首席财务官(公司唯一的会计),偷懒这件事情上我还没有输过谁,既然那么多变量,那我就把20个变量偷偷的变成5个变量,四舍五入我只要分析5个变量的数据,是时候打开微信约妹子了。
废话结束,开启正文模式
那哪些才是可选择的重要指标呢?这就是我们所说的数据降维,将原来20多个变量降到用3个或者5个变量来解释,并且这几个变量可以解释原数据的大部分信息(比如85%以上),且各个指标保持独立。
达到降维目的的方法有:主成分分析法和因子分析法,并且可以认为主成分分析法是因子分析的一个特例。
那么今天我们来详细讲解一下主成分分析法,包含原理+案例+操作,不想看原理的宝宝可直接跳到后面看案例。
1.1 主成分分析法(PCA)的原理
主成分分析法是运用“降维”思想,把多个指标变换成少数综合指标的多元统计方法,这里的综合指标就是主成分。每个主成分都是原始变量的线性组合,彼此相互独立,并保留了原始变量绝大部分信息。其本质是通过原始变量的相关性,寻求相关变量的综合替代对象,并且保证了转化过程中的信息损失最小 。
主成分与原始变量之间的关系:
- 主成分是原始变量的线性组合
- 主成分的数量相对于原始数量更少
- 主成分保留了原始变量的大部分信息
- 主成分之间相互独立
1.2 主成分分析法的应用步骤
1.21 根据标准化后的数据集计算协方差矩阵Z:
相关系数程度区分列如下面两个表所示:
1.22 计算R的特征值及对应特征向量
主成分分析的一个关键问题是:主成分的个数选多少个比较合适?
有3个主要的衡量标准:
- 保留的主成分使得方差贡献率达到85%以上
- 保留的主成分的方差(特征值)大于1
- 碎石图绘制了关于各主成分及其特征值的图形,我们只需要保留图形中变化最大之处以上的主成分即可
2 主成分分析法应用实例
2.1 背景介绍
某金融服务公司为了了解贷款客户的信用程度,评价客户的信用等级,采用信用评级常用的 5C(能力,品格 ,担保 ,资本,环境)方法对15名客户进行打分, 由此判断客户违约的可能性。
- 品格:指客户的名誉;
- 能力:指客户的偿还能力;
- 资本:指客户的财务实力和财务状况;
- 担保:指对申请贷款项担保的覆盖程度;
- 环境:指外部经济政策环境对客户的影响;
由于各项指标的难易程度不同,因此需要对5项指标进行赋权,以便能够更加合理的对15名客户进行评价。
2.2 数据处理
2.21 计算每一列的平均值
2.22 计算每一列的标准差
例如能力该指标,我们计算其标准差
2.23 数据标准化处理
例如客户1的能力该项指标,使用公式:
2.24 计算相关系数矩阵
例如品格与能力的相关系数,使用公式 :
2.25 计算特征值
2.26 计算特征向量
2.27 计算贡献率
例如能力,我们使用公式
2.28 计算累积贡献率
3、案例工具实现
3.1使用工具
3.11 SPSSPRO—>【统计建模—>主成分分析(PCA)】
3.12案例操作
Step1:新建项目;
Step2:上传数据;
Step3:选择对应数据打开后进行预览,确认无误后点击开始分析;
step4:选择【主成分分析】;
step5:查看对应的数据数据格式,【主成分分析】要求输入数据为放入 [定量] 自变量 X(变量数 ≥2)。
step6:选择主成分个数(注意:主成分个数的选择,依赖于个人能接受的最大主成分个数,而特征根选择则是根据设定的阈值为界限,以大于该界限对应的主成分个数作为选取的主成分个数,默认为 1。)
step7:点击【开始分析】,完成全部操作。
3.13 分析结果解读
以下生成的结果来源于SPSSPRO软件的分析结果导出
输出结果1:KMO检验和Bartlett的检验
*这两项检验是用来判断是否可以进行主成分分析。 对于KMO值:0.8上非常合适做主成分分析,0.7-0.8之间一般适合,0.6-0.7之间不太适合,0.5-0.6之间表示差,0.5下表示极不适合,对于 Bartlett的检验(p < 0.05,严格来说p < 0.01),若显著性小于0.05或0.01,拒绝原假设,则说明可以做主成分分析
KMO检验的结果显示,KMO的值为0.713,同时,Bartlett球形检验的结果显示,显著性P值为0.000***,水平上呈现显著性,拒绝原假设,各变量间具有相关性,主成分分析有效,程度为一般。
输出结果2:方差解释表格*
方差解释表中,在主成分3时,总方差解释的特征根低于1.0,变量解释的贡献率达到97.1%,所以我们选择三个主成分是有效的。
在这里,特征根的值是按照从大到小进行排序。
输出结果3:碎石图*
碎石图是根据特征值下降的坡度来确认需要选择的主成分个数,当曲线变得平缓时,对应的因子数就可以作为参考因子数。由图可知,从第三个主成分开始,主成分的特征根值开始缓慢的下降,且在满足主成分累积解释的贡献率达到 90%的情况下,我们可以选择三个主成分。
输出结果4:因子载荷系数表
上表可以分析到每个主成分中隐变量的重要性。 第一个主成分与能力、品格、资本、担保这四个变量的相关程度较大,可以概括为“个人信用品质”;第二个主成分主与环境这一个变量的相关程度较大,可以概括为“外部政策影响”。
输出结果5:因子载荷矩阵热力图
上图可以分析到每个主成分中隐变量的重要性,热力图颜色越深说明相关性越大。第一个主成分与能力、品格、资本、担保这四个变量的相关程度较大,第二个主成分主与环境这一个变量的相关程度较大。
输出结果6:因子载荷象限分析
因子载荷图通过将多因子降维成双主成分或者三主成分,通过象限图的方式呈现主成分的空间分布。如果提取 3 个主成分时,则呈现三维载荷因子散点图。(二维图三维图可以自行选择)
输出结果7:成分矩阵表
由上表可得到主成分分析降维后的计算公式:
F1=0.259×能力+0.276×品格+0.244×担保+0.276×资本+0.102×环境
F2=-0.301×能力-0.12×品格+0.355×担保-0.185×资本+0.743×环境
F3=1.004×能力+0.254×品格-1.724×担保-0.128×资本+1.238×环境
由上可以得到: F=(0.691/0.971)×F1+(0.245/0.971)×F2+(0.036/0.971)×F3
输出结果8:因子权重分析*
主成分分析的权重计算结果显示,主成分1的权重为71.126%、主成分2的权重为25.192%、主成分3的权重为3.681%。
输出结果9:综合得分表
由图可知,其中第10位客户的综合得分最高,也就是他的信用等级最高,其次是第15位客户。
注:
主成分要求变量之间的共线性或相关关系比较强,否则不能通过 KMO 检验和 Bartlett 球形检验; 主成分分析倾向于降维,从而达到简化系统结构,抓住问题实质的目的。(可侧重于输出结果 2、输出结果 3、输出结果 8); 主成分分析时通常需要综合自己的专业知识,以及软件结果进行综合判断,即使是特征根值小于 1,也一样可以提取主成分; KMO 值为 null 不存在可能导致的原因为:1)样本量过少容易导致相关系数过高,一般希望分析样本量大于 5 倍分析项个数; (2)各个分析项之间的相关关系过高或过低。
4.结论
主成分分析作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。通过对原始变量进行综合与简化,可以客观地确定各个指标的权重,避免主观判断的随意性。并且不要求数据呈正态分布,其就是按数据离散程度最大的方向对基组进行旋转,这特性扩展了其应用范围,比如,用于人脸识别。但同时,其适用于变量间有较强相关性的数据,若原始数据相关性弱,则起不到很好的降维作用(必须通过KMO和Bartlett的检验),并且降维后,存在少量信息丢失,不可能包含100%原始数据,原始数据经过标准化处理之后,含义会发生变化,且主成分的解释含义较原始数据比较模糊。
5.PCA过程讲解
当数据维度太大时,我们通常需要进行降维处理,降维处理的方式有很多种,PCA主成分分析法是一种常用的一种降维手段,它主要是基于方差来提取最有价值的信息,虽然降维之后我们并不知道每一维度的数据代表什么意义,但是它将主要的信息成分保留了下来,那么PCA是如何实现的呢?
我们首先要知道基坐标的概念,基坐标其实就是我们定义的坐标轴,我们平时最常用的基坐标便是X,Y坐标轴,如果我们重新定义了一个基坐标,那么原来的点就需要和新的坐标轴的单位向量做内积,这样才能得到新的坐标轴上点的坐标,这个过程就是基变换,其实就是把原来的点投影到我们重新定义的基坐标轴上。
因为上面我们说了基坐标的概念,那么我们如何选择一个基坐标才能尽量保留更多的信息呢?一种直观的看法就是希望投影后的投影值尽可能分散,为什么呢?因为我们把原来的数据投影到新的坐标轴上,数据只有尽可能分散,那么我们才能更好的将数据区分开来,所以我们就要寻找一个基,使得所有数据变换为这个基上的坐标后,方差值最大,其实就是数据最分散。
但是还有一个问题,如果我们单纯只是选择方差最大的方向,后续方向应该会和方差最大的方向接近重合,其实就是我们的基坐标轴会重合在一起,听不懂也没关系,我们只需要知道我们需要让基坐标的各个坐标轴垂直,不垂直就不好就可以了。
我们需要让基坐标的各个坐标轴垂直的话,那么就有了协方差的概念,协方差其实就是判断两个特征之间的关系,如果我们让协方差等于0,那么两个特征就不相关了,也就是它们对应的基坐标其实就垂直了。
这就是我们优化的目标:
1 | 将一组N维向量降为K维(K大于0,小于N),目标是选择K个单位正交基,使 原始数据变换到这组基上后,各字段两两间协方差为0,字段的方差则尽可能大。 |
6.Q&A
Q&A
Q:为什么要做中心化
**A:**中心化并不属于预处理,而是 PCA 本身流程的一部分。如果数据其中某一特征(矩阵的某一列)的数值特别大,那么它在整个误差计算的比重上就很大,那么可以想象在投影到低维空间之后,为了使低秩分解逼近原数据,整个投影会去努力逼近最大的那一个特征,而忽略数值比较小的特征。因为在建模前我们并不知道每个特征的重要性,这很可能导致了大量的信息缺失。为了“公平”起见,防止过分捕捉某些数值大的特征,我们会对每个特征先进行标准化处理,使得它们的大小都在相同的范围内,然后再进行PCA。
减去均值等同于坐标移动,这样就能把原始数据点的中心移到与原点重合。
附:
标准化是将每个特征(即矩阵的每一列)减去均值并除以标准差。除以标准差是为了统一并消除量纲。
归一化仅仅是指除以标准差或类似意思。
Q:为什么选协方差矩阵
**A:**因为目标函数就是要让方差最大,让协方差最小
Q:为什么要找特征值和特征向量
**A:**当协方差矩阵分解为特征向量和特征值之后,特征向量表示着变换方向,而特征值表示着伸缩尺度。在PCA中,特征值描述着数据间的协方差。我们可以按照特征值的大小降序排列特征向量,如此我们就按照重要性的次序得到了主成分排列。
Q:为什么要让协方差最小
**A:**如果我们单纯只选择方差最大的方向,很明显,第二个选择的维度与第一个维度应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让不同尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个维度不是完全独立,必然存在重复表示的信息。
Q:主元成份分析(PCA)对输入数据的要求?
A:
1.线形性假设。
PCA的内部模型是线性的。这也就决定了它能进行的主元分析之间的关系也是线性的。现在比较流行的kernel-PCA的一类方法就是使用非线性的权值对原有PCA技术的拓展。
2.使用中值和方差进行充分统计。
使用中值和方差进行充分的概率分布描述的模型只限于指数型概率分布模型。(例如高斯分布),也就是说,如果我们考察的数据的概率分布并不满足高斯分布或是指数型的概率分布,那么PCA将会失效。在这种模型下,不能使用方差和协方差来很好的描述噪音和冗余,对教化之后的协方差矩阵并不能得到很合适的结果。事实上,去除冗余的最基础的方程是:其中 代表概率分布的密度函数。基于这个方程进行冗余去除的方法被称作独立主元分析(ICA)方法(Independent Component Analysis)。不过,所幸的是,根据中央极限定理,现实生活中所遇到的大部分采样数据的概率分布都是遵从高斯分布的。所以PCA仍然是一个使用于绝大部分领域的稳定且有效的算法。
3.大方差向量具有较大重要性。
PCA方法隐含了这样的假设:数据本身具有较高的信噪比,所以具有最高方差的一维向量就可以被看作是主元,而方差较小的变化则被认为是噪音。这是由于低通滤波器的选择决定的。
4.主元正交。PCA方法假设主元向量之间都是正交的,从而可以利用线形代数的一系列有效的数学工具进行求解,大大提高了效率和应用的范围。
Q:输入需要满足高斯么?
**A:**这个问题请教了大牛,因为有时数据的分布并不是满足高斯分布。在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的。在寻找主元时不能将方差作为衡量重要性的标准。要根据数据的分布情况选择合适的描述完全分布的变量,然后根据概率分布式来计算两个向量上数据分布的相关性。等价的,保持主元间的正交假设,寻找的主元同样要使。这一类方法被称为独立主元分解(ICA)。
Q:样本数和特征维数有要求么?
**A:**pca降维不需要样本的个数大于特征的维数,没有特别要求,如果降维到30*29,这个是因为映射到另一个空间了,无需担心丢失了很多信息,并非特征选择直接丢掉了特征了,只是在另一个空间而已表达出原空间的高维。因此,要保证训练样本和测试样本被映射到同一个特征空间,这样才能保证数据的一致性。
Q:样本数小于特征维数怎么办?
**A:**假设在3维空间中有N=2个点,N个点来自维度为N-1的manifold,因为2个点必然在一条直线上,即这2个点得到1维子空间,它们的方差是“spread”在这个1维子空间上的,和样本的维度并没有什么关系。也就是说,N个样本的方差是spread在N-1维子空间上,即只有N-1个components。
举个例子来说,有两个点(1,1,1),(2,2,2),根据PCA的投影步骤:
(1)找到新的坐标系统的原点(1.5,1.5,1.5)
(2)两个点到新坐标轴的投影距离尽可能小,此处为0
(3)第一个component将是从(0,0,0)到(3,3,3)的直线,这个直线是使样本点投影到它后方差最大的一条线
(4)第二个component方向必须和第一个component正交,这条线可能是从(0,0,3)到(3,3,0),或者(0,3,0)到(3,0,3),但无论向谁投影,这两个点投影后它们的方差为0.
当样本数小于样本维度时,出现的这种现象就是“the curse of dimensionality”