banner

机器学习系列(7):用PCA降维

作者: afenxi来源: afenxi时间:2017-02-28 09:07:050

摘要:本章我们将介绍一种降维方法,PCA(Principal Component Analysis,主成分分析)。降维致力于解决三类问题。

用PCA降维

本章我们将介绍一种降维方法,PCA(Principal Component Analysis,主成分分析)。降维致力于解决三类问题。第一,降维可以缓解维度灾难问题。第二,降维可以在压缩数据的同时让信息损失最小化。第三,理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。下面,我们用PCA将一个高维数据降成二维,方便可视化,之后,我们建一个脸部识别系统。

PCA简介

在第三章,特征提取与处理里面,涉及高维特征向量的问题往往容易陷入维度灾难。随着数据集维度的增加,算法学习需要的样本数量呈指数级增加。有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习需要更多的内存和处理能力。另外,随着维度的增加,数据的稀疏性会越来越高。在高维向量空间中探索同样的数据集比在同样稀疏的数据集中探索更加困难。

主成分分析也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结构的技术。PCA通常用于高维数据集的探索与可视化。还可以用于数据压缩,数据预处理等。PCA可以把可能具有相关性的高维变量合成线性无关的低维变量,称为主成分( principal components)。新的低维数据集会经可能的保留原始数据的变量。

PCA将数据投射到一个低维子空间实现降维。例如,二维数据集降维就是把点投射成一条线,数据集的每个样本都可以用一个值表示,不需要两个值。三维数据集可以降成二维,就是把变量映射成一个平面。一般情况下,n维数据集可以通过映射降成k维子空间,其中k是选取的主成分数目。

假如你是一本养花工具宣传册的摄影师,你正在拍摄一个水壶。水壶是三维的,但是照片是二维的,为了更全面的把水壶展示给客户,你需要从不同角度拍几张图片。下图是你从四个方向拍的照片:

机器学习系列(7):用PCA降维-数据分析网

第一张图里水壶的背面可以看到,但是看不到前面。第二张图是拍前面,可以看到壶嘴,这张图可以提供了第一张图缺失的信息,但是壶把看不到了。从第三张俯视图里无法看出壶的高度。第四张图是你打算放进目录的,水壶的高度,顶部,壶嘴和壶把都清晰可见。

PCA的设计理念与此类似,它可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。PCA旋转数据集与其主成分对齐,将最多的变量保留到第一主成分中。假设我们有下图所示的数据集:

机器学习系列(7):用PCA降维-数据分析网

数据集看起来像一个从原点到右上角延伸的细长扁平的椭圆。要降低整个数据集的维度,我们必须把点映射成一条线。下图中的两条线都是数据集可以映射的,映射到哪条线样本变化最大?

机器学习系列(7):用PCA降维-数据分析网

显然,样本映射到虚线的变化比映射到点线的变化。实际上,这条虚线就是第一主成分。第二主成分必须与第一主成分正交,也就是说第二主成分必须是在统计学上独立的,会出现在与第一主成分垂直的方向,如下图所示:

机器学习系列(7):用PCA降维-数据分析网

后面的每个主成分也会尽量多的保留剩下的变量,唯一的要求就是每一个主成分需要和前面的主成分正交。

现在假设数据集是三维的,散点图看起来像是沿着一个轴旋转的光盘。

机器学习系列(7):用PCA降维-数据分析网

这些点可以通过旋转和变换使光盘完全变成二维的。现在这些点看着像一个椭圆,第三维上基本没有变量,可以被忽略。

当数据集不同维度上的方差分布不均匀的时候,PCA最有用。如果是一个球壳行数据集,PCA不能有效的发挥作用,因为各个方向上的方差都相等;没有丢失大量的信息维度一个都不能忽略。

PCA计算步骤

在介绍PCA的运行步骤之前,有一些术语需要说明一下。

方差,协方差和协方差矩阵

方差(Variance)是度量一组数据分散的程度。方差是各个样本与样本均值的差的平方和的均值:

机器学习系列(7):用PCA降维-数据分析网

协方差(Covariance)是度量两个变量的变动的同步程度,也就是度量两个变量线性相关性程度。如果两个变量的协方差为0,则统计学上认为二者线性无关。注意两个无关的变量并非完全独立,只是没有线性相关性而已。计算公式如下:

机器学习系列(7):用PCA降维-数据分析网

如果协方差不为0,如果大于0表示正相关,小于0表示负相关。当协方差大于0时,一个变量增大是另一个变量也会增大。当协方差小于0时,一个变量增大是另一个变量会减小。协方差矩阵(Covariance matrix)由数据集中两两变量的协方差组成。矩阵的第 (i,j) 个元素是数据集中第i和第j个元素的协方差。例如,三维数据的协方差矩阵如下所示:

C=⎡⎣⎢cov(x1,x1)cov(x2,x1)cov(x3,x1)cov(x1,x2)cov(x2,x2)cov(x3,x2)cov(x1,x3)cov(x2,x3)cov(x3,x3)⎤⎦⎥

让我们计算下表数据的协方差矩阵:

X1 X2 X3 2 0 −1.4 2.2 0.2 −1.5 2.4 0.1 −1 1.9 0 −1.2

三个变量的样本均值分别是2.125,0.075和-1.275。用Numpy计算协方差矩阵如下:

In [1]:

import numpy as np X = [[2, 0, -1.4], [2.2, 0.2, -1.5], [2.4, 0.1, -1], [1.9, 0, -1.2]] print(np.cov(np.array(X).T))

[[ 0.04916667 0.01416667 0.01916667] [ 0.01416667 0.00916667 -0.00583333] [ 0.01916667 -0.00583333 0.04916667]] 特征向量和特征值

向量是具有大小(magnitude)和方向(direction)的几何概念。特征向量(eigenvector)是一个矩阵的满足如下公式的非零向量:

机器学习系列(7):用PCA降维-数据分析网

其中,机器学习系列(7):用PCA降维-数据分析网是特征向量,A是方阵,λ是特征值。经过A变换之后,特征向量的方向保持不变,只是其大小发生了特征值倍数的变化。也就是说,一个特征向量左乘一个矩阵之后等于等比例放缩(scaling)特征向量。德语单词eigen的意思是属于...或...专有( belonging to or peculiar to);矩阵的特征向量是属于并描述数据集结构的向量。

特征向量和特征值只能由方阵得出,且并非所有方阵都有特征向量和特征值。如果一个矩阵有特征向量和特征值,那么它的每个维度都有一对特征向量和特征值。矩阵的主成分是其协方差矩阵的特征向量,按照对应的特征值大小排序。最大的特征值就是第一主成分,第二大的特征值就是第二主成分,以此类推。

让我们来计算下面矩阵的特征向量和特征值:

A=[12−2−3]

根据前面的公式A乘以特征向量,必然等于特征值乘以特征向量。我们建立特征方程求解:

机器学习系列(7):用PCA降维-数据分析网 |A−λ∗I|=∣∣∣[12−2−3]−[λ00λ]∣∣∣=0

从特征方程可以看出,矩阵与单位矩阵和特征值乘积的矩阵行列式为0:

∣∣∣[1−λ2−2−3−λ]∣∣∣=(λ+1)(λ+1)=0

矩阵的两个特征值都等于-1。现在再用特征值来解特征向量。

机器学习系列(7):用PCA降维-数据分析网

首先,我们用特征方程:

机器学习系列(7):用PCA降维-数据分析网

把数据代入:

机器学习系列(7):用PCA降维-数据分析网

我们把特征值机器学习系列(7):用PCA降维-数据分析网代入方程可得如下方程:

机器学习系列(7):用PCA降维-数据分析网

任何满足方程的非零向量都可以作为特征向量,我们取其特征向量为

机器学习系列(7):用PCA降维-数据分析网

PCA需要单位特征向量,也就是L2范数等于1的特征向量:

机器学习系列(7):用PCA降维-数据分析网

那么把前面的特征向量带入可得 机器学习系列(7):用PCA降维-数据分析网 L2范数为机器学习系列(7):用PCA降维-数据分析网

于是单位特征向量是:

机器学习系列(7):用PCA降维-数据分析网

我们可以通过Numpy检验我们手算的特征向量。eig函数返回特征值和特征向量的元组:

In [8]:

import numpy as np w, v = np.linalg.eig(np.array([[1, -2], [2, -3]])) print(特征值:.format(np.mean(accuracies), accuracies)) classifier.fit(X_train_reduced, y_train) predictions = classifier.predict(X_test_reduced) print(classification_report(y_test, predictions))

交叉验证准确率是:0.823104855161 [ 0.84210526 0.79 0.8372093 ] precision recall f1-score support mlslpic/att-faces/s1 1.00 1.00 1.00 1 mlslpic/att-faces/s10 1.00 1.00 1.00 2 mlslpic/att-faces/s11 1.00 0.83 0.91 6 mlslpic/att-faces/s12 1.00 1.00 1.00 2 mlslpic/att-faces/s13 1.00 1.00 1.00 3 mlslpic/att-faces/s14 0.33 1.00 0.50 2 mlslpic/att-faces/s15 1.00 1.00 1.00 4 mlslpic/att-faces/s17 1.00 1.00 1.00 2 mlslpic/att-faces/s18 1.00 1.00 1.00 2 mlslpic/att-faces/s19 1.00 1.00 1.00 2 mlslpic/att-faces/s2 0.00 0.00 0.00 0 mlslpic/att-faces/s20 1.00 1.00 1.00 2 mlslpic/att-faces/s21 1.00 1.00 1.00 3 mlslpic/att-faces/s22 1.00 1.00 1.00 3 mlslpic/att-faces/s23 1.00 1.00 1.00 1 mlslpic/att-faces/s24 1.00 1.00 1.00 3 mlslpic/att-faces/s25 1.00 1.00 1.00 4 mlslpic/att-faces/s26 1.00 1.00 1.00 4 mlslpic/att-faces/s27 1.00 1.00 1.00 3 mlslpic/att-faces/s28 0.00 0.00 0.00 1 mlslpic/att-faces/s29 1.00 0.50 0.67 2 mlslpic/att-faces/s3 1.00 1.00 1.00 3 mlslpic/att-faces/s30 1.00 1.00 1.00 3 mlslpic/att-faces/s31 0.75 1.00 0.86 3 mlslpic/att-faces/s32 1.00 0.75 0.86 4 mlslpic/att-faces/s33 0.00 0.00 0.00 1 mlslpic/att-faces/s34 0.75 1.00 0.86 3 mlslpic/att-faces/s35 1.00 1.00 1.00 2 mlslpic/att-faces/s36 0.50 1.00 0.67 1 mlslpic/att-faces/s37 1.00 0.17 0.29 6 mlslpic/att-faces/s38 1.00 1.00 1.00 2 mlslpic/att-faces/s39 1.00 1.00 1.00 2 mlslpic/att-faces/s4 1.00 1.00 1.00 1 mlslpic/att-faces/s40 0.00 0.00 0.00 1 mlslpic/att-faces/s5 0.80 0.80 0.80 5 mlslpic/att-faces/s6 1.00 1.00 1.00 2 mlslpic/att-faces/s7 1.00 1.00 1.00 2 mlslpic/att-faces/s8 1.00 1.00 1.00 4 mlslpic/att-faces/s9 1.00 1.00 1.00 3 avg / total 0.93 0.88 0.88 100 总结

本章,我们介绍了降维问题。高维数据不能轻易可视化。估计器训练高维数据集时,也可能出现维度灾难。我们通过主成分分析法缓解这些问题,将可能解释变量具有相关性的高维数据集,通过将数据映射到一个低维子空间,降维成一个线性无关的低维数据集。我们用主成分分析将四维的鸢尾花数据集降成二维数据进行可视化,还建立了一个脸部识别系统。下一章,我们将回到监督学习方法,介绍一种分类算法——感知器(perceptron),本系列的最后两章都是建立在感知器的基础上。

banner
看过还想看
可能还想看
热点推荐

永洪科技
致力于打造全球领先的数据技术厂商

申请试用
Copyright © 2012-2024开发者:北京永洪商智科技有限公司版本:V10.2
京ICP备12050607号-1京公网安备110110802011451号 隐私政策应用权限