大数据主成分分析(PCA)
问题描述
主成分分析(PCA)和大数据降维SVD之间是有联系的,我们今天就看看他们之间到底什么关系,但是在没有理清楚他们之前关系之前,我们需要线看看PCA到底代表什么意思。
主成分分析(PCA)的理解
PCA的问题其实是一个基的变换,也就是坐标系的变换,使得变换后的数据有着最大的方差。方差的大小描述的是一个变量的信息量,比如漆黑的夜里突然冒出一个火星,这里边包含的信息量就很大,如果一直不变化,那就是什么信息都没有。
我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们用于机器学习的数据(主要是训练数据),方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了。
方差的概念
说到这里我们就需要理解一下方差的概念了。百度百科的解释:方差是在概率论和统计中衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数在许多实际问题中,研究方差即偏离程度有着重要意义。
那么我们所的通俗一点,方差就是描述一堆数据的离散程度,或者这一堆数据的活跃程度。形象比喻:你们公司有个小伙子非常外向,他工作的间隙满公司乱逛,那么这个人的方差大(信息量就多)。相反你们公司另外一个小伙子非常内向,上班的时间一直不动,那么他的方差就小(信息量就少)。
具体方差如何计算得到的呢?
首先求的所有数据的中心点,然后计算所有点到中心点的距离,把这些距离和起来除以总个数,得到距离的平均数就是这这些数据点的方差。
回到主成分分析PCA上
我们如果有一堆二维数据,无论是从X轴还是Y轴看上去方差都差不多,但是通过还一个方向看之后就明显不一样了,那么我们能不能把坐标系转到这样一个方向上,这样看起来方差变大了,信息量也自然就变大了。以下面这张图为例子:
我们看看这个图片所表示的数据,如果是使用原始的X,Y坐标系,那么为了表示这些点必须要二维数据(x,y)才能表示。但是如果我们能够以(Signal, Noise)线所表示的新坐标系来表示这些数据,也是可以的。但是这个时候signal组的方差比较大,noise轴的方差比较小。为了压缩的需要,我们可以忽略Noise轴的数据,只保留Signal轴的数据,这个时候我们就可以只用一维数据来表示这些点了(Signal)。这就是二维主成分分析所具有的意义。
N维数据主成分分析
如果我们推广开来,有一个N维的数据,PCA针对N维数据的工作简单点来说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的r个坐标轴能够使得空间的压缩使得数据的损失最小。
主成分分析PCA和奇异值分解SVD的联系
说到这里你可能会体会到主成分分析和奇异值之间的联系了,他们都是通过降维方式来压缩原始数据信息,使得损失的信息尽量的少。
利用sklearn库体验PCA
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
iris = load_iris()
X, y = iris.data, iris.target
pca = PCA().fit(X)
print('Explained variance by component: %s' %pca.explained_variance_ratio_)
Explained variance by component: [0.92461872 0.05306648 0.01710261 0.00521218]
pca.components_
array([[ 0.36138659, -0.08452251, 0.85667061, 0.3582892 ],
[ 0.65658877, 0.73016143, -0.17337266, -0.07548102],
[-0.58202985, 0.59791083, 0.07623608, 0.54583143],
[-0.31548719, 0.3197231 , 0.47983899, -0.75365743]])