【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程

简单讲:PCA是一个降维的过程,ICA则是帮助你从多个维度分离有用数据的过程。

特征降维:去掉可分性不强和冗余的特征

经过X的降维转换Z = XU,X 是 m × n 的矩阵, U 是 n × k 的矩阵,Z 是 m × k 的矩阵,就得到X降维后的降维矩阵Z。

Z的shape=(m, k),记住这里的降维是降低样例的特征维度,所以Z的shape=(m, k),其中m还是样本矩阵的样例总数,k是降维后的特征维度总数。

1.PCA主成分分析原理

PCA的主要支撑理论是协方差以及协方差矩阵,协方差等知识点详见以前文章的介绍:【机器学习】【线性代数】均值,无偏估计,总体/样本方差,样本标准差,矩阵中心化/标准化、协方差,正/不/负相关等,协方差矩阵

在信号处理中认为信号具有较大的方差,噪音有较小的方差,信噪比就是信号与噪音的方差比,信噪比越大越好。

2.PCA原理和PCA降维原理

此部分先关图形来自:https://www.jisilu.cn/question/252942

PCA降维原理是基于训练数据集X的协方差矩阵C的特征向量组成的K阶矩阵U,XU得到X的k阶降维矩阵Z。

主要原理用的是协方差矩阵C是一个实对角矩阵的性质!!!!

用到的最重要的性质是:实对角阵的不同特征值对应的特征向量是正交的!!!

再结合训练样本集X的理想降维矩阵的特点:每个维度特征线性不相关,即每个维度特征的协方差=0。

利用以上知识就得到PCA降维的公式啦~~~~,详细推导过程见下所示:

2.1训练样本集

样本集X=m×n矩阵,表示m个样例,n个特征维度

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第1张图片

2.2求样本集X的协方差矩阵C


【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第2张图片

(1)协方差矩阵是一个实对称阵

(2)协方差矩阵的对角线上的元素是每个维度的方差

(3)协方差矩阵计算的是一个样本中不同维度之间的协方差,而不是两个或多个样本之间的协方差

2.3用到的协方差矩阵C的一些关键性质

因为协方差矩阵C是一个实对称阵,所以协方差矩阵C具有实对称阵的一些特征:

(1)协方差矩阵C可以对角化

(2)协方差矩阵C的特征值都是实数

(3)协方差矩阵C的特征向量都是实向量

(4)协方差矩阵C的相似对角阵上的元素=协方差矩阵C的特征值

(5)协方差矩阵C的不同特征值对应的特征向量是正交的!!!!

2.4根据2.3中C的关键性质得到一个对角阵

根据协方差矩阵C是实对称阵的性质,可以轻松得到n 个线性无关的非零特征向量,这些特征向量构成的特征矩阵E满足:

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第3张图片

Λ 是一个对角矩阵,除了对角线λ1,λ2,....,λn是非零值,其他位置都是0。

2.5样本集理想的降维矩阵

训练样本集X理想的降维矩阵,应该是一个这样的矩阵:降维矩阵的每个维度特征都是线性无关的(即协方差为0),即降维特征的每个特征向量是正交的,集合上说就是垂直的,代数上说就是线性无关的。

下面我们假设:

训练数据集转换为理想的降维矩阵的公式为 Z=XU,U我们还不知道是什么,现在也不用知道U具体是什么,在下面2.6节会求出。

记我们得到训练样本集X理想的降维矩阵为Z,如下所示:

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第4张图片

降维矩阵的每个维度特征都是线性无关的,也就是每个维度特征相互的协方差为0,即cov(X,Y)=0,则可知降维矩阵的协方差矩阵为一个对角阵,记降维矩阵Z的协方差矩阵为D,是一个对角阵,结果应该如下所示:

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第5张图片

以前文章有介绍,协方差矩阵对角线上的值是对应维度特征的方差,其他位置上的值是对应俩维度特征的协方差,容易知道,除了对角线上值非0,其他位置上的协方差都为0,因为前面说了:降维矩阵的每个维度特征都是线性无关的,也就是每个维度特征相互的协方差为0,即cov(X,Y)=0

2.6样本集理想的降维矩阵的求解

在前面2.5节我们有假设:训练数据集转换为理想的降维矩阵的公式为 Z = XU,带入降维矩阵Z的协方差矩阵D的公式中,得到:

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第6张图片

可知

(1)训练数据集转换为理想的降维矩阵的公式为 Z = XU中的U是E

(2)U就是由训练样本集X的协方差矩阵C的特征向量组成的矩阵

(3)降维矩阵Z的协方差矩阵D的对角线上元素就是训练样本集X的协方差矩阵C的特征值

哈哈,是不是很拗口。

我们称Z = XU中的U为训练样本集X的k阶降维矩阵Z的降维转换矩阵,

从X到Z的这个过程称为X的降维过程,U称为X的降维转换矩阵,Z称为X的降维矩阵,X是训练样本集。

2.7的任务就是给出U的求解过程和Z的求解结果~~~

2.7训练样本集X的降维矩阵Z的公式

Step1:计算训练数据集X的协方差矩阵C

Step2:计算C的特征值和特征向量

Step3:特征值按照数值降序排列,特征向量按照自己特征值的顺序也依次排列

Step4:如果要得到训练数据集X的k阶降维矩阵,则取前K个特征向量u1,u2,...,uk,组成降维转换矩阵U={u1, u2, ..., uk}

Step5:然后经过X的降维转换Z = XU,X 是 m × n 的矩阵, U 是 n × k 的矩阵,Z 是 m × k 的矩阵,就得到X降维后的降维矩阵Z:

【机器学习】【PCA-1】PCA基本原理和原理推导 + PCA计算步骤讲解 + PCA实例展示数学求解过程_第7张图片

3.PCA计算步骤,实例讲解

下面给出PCA降维的计算步骤。

3.1给出训练样本集X

    '10样本3特征的样本集'
    X = np.array([[10, 15, 29],
                        [15, 46, 13],
                        [23, 21, 30],
                        [11, 9,  35],
                        [42, 45, 11],
                        [9,  48, 5],
                        [11, 21, 14],
                        [8,  5,  15],
                        [11, 12, 21],
                        [21, 20, 25]])

3.2样本集矩阵X中心化

中心化就是每个特征值减去所在维度特征的平均值。以X为例的话就是每个元素减去所在列的平均值。

样本集的特征均值:
 [ 16.1  24.2  19.8]
样本集的中心化(每个元素将去当前维度特征的均值):
 [[ -6.1  -9.2   9.2]
 [ -1.1  21.8  -6.8]
 [  6.9  -3.2  10.2]
 [ -5.1 -15.2  15.2]
 [ 25.9  20.8  -8.8]
 [ -7.1  23.8 -14.8]
 [ -5.1  -3.2  -5.8]
 [ -8.1 -19.2  -4.8]
 [ -5.1 -12.2   1.2]
 [  4.9  -4.2   5.2]]

3.3计算样本矩阵的协方差矩阵C

 C=[[ 108.32222222   74.53333333  -10.08888889]
    [  74.53333333  260.62222222 -106.4       ]
    [ -10.08888889 -106.4          94.17777778]]

3.4求样本集矩阵X的协方差矩阵C的特征值和特征向量

样本矩阵X的协方差矩阵C的特征值:
 [ 335.15738485   95.32771231   32.63712506]
样本矩阵X的协方差矩阵C的特征向量:
 [[-0.30253213 -0.87499307 -0.37797014]
 [-0.86718533  0.08811216  0.49012839]
 [ 0.39555518 -0.47604975  0.78543792]]

3.5构建降维转换矩阵U

假设K=2,则

按照特征值最大的top2特征值对应的特征向量u1,u2组成U,u1,u2都是列向量

可知u1= (-0.30253213, -0.86718533, 0.39555518), u2=(-0.87499307,0.08811216,-0.47604975)

U=(u1, u2),shape=n×k=3×2

3.6有降维转换公式Z=XU求得X的降维矩阵Z

    U =  np.array([[-0.30253213, -0.87499307],
                   [-0.86718533,  0.08811216],
                   [ 0.39555518, -0.47604975]])
    Z = np.dot(samples, U)
    print('样本矩阵X的2阶降维矩阵Z为:\n', Z)
求得结果为:
样本矩阵X的2阶降维矩阵Z为:
 [[ -4.56200104 -21.2336912 ]
 [-39.28629002 -15.26038349]
 [-13.30247561 -32.55597794]
 [  2.71190993 -25.49365577]
 [-47.37858268 -38.02120912]
 [-42.36990935  -6.0258027 ]
 [-16.00097294 -14.43926499]
 [ -0.822856   -13.7001301 ]
 [ -5.42741864 -18.56462272]
 [-13.80800193 -28.51385518]]

到此通过以上的步骤,应该很容易和熟练求训练样本集矩阵X的K阶降维矩阵Z了,Z的shape=(m, k),记住这里的降维是减少特征维度,所以Z的shape=(m, k)其中m还是样本矩阵的样例总数,k是降维后的特征维度总数。

参考文献:

[1]PCA主成分分析(Principal components analysis)

[2]机器学习笔记033|主成分分析法(PCA)

[3][机器学习]-PCA数据降维:从代码到原理的深入解析

[4]PCA降维算法详解 以及代码示例

(end)


你可能感兴趣的:(人工智能,机器学习,跟我一起学机器学习,Machine,Learning)