简单讲: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是降维后的特征维度总数。
PCA的主要支撑理论是协方差以及协方差矩阵,协方差等知识点详见以前文章的介绍:【机器学习】【线性代数】均值,无偏估计,总体/样本方差,样本标准差,矩阵中心化/标准化、协方差,正/不/负相关等,协方差矩阵
在信号处理中认为信号具有较大的方差,噪音有较小的方差,信噪比就是信号与噪音的方差比,信噪比越大越好。
此部分先关图形来自:https://www.jisilu.cn/question/252942
PCA降维原理是基于训练数据集X的协方差矩阵C的特征向量组成的K阶矩阵U,XU得到X的k阶降维矩阵Z。
主要原理用的是协方差矩阵C是一个实对角矩阵的性质!!!!
用到的最重要的性质是:实对角阵的不同特征值对应的特征向量是正交的!!!
再结合训练样本集X的理想降维矩阵的特点:每个维度特征线性不相关,即每个维度特征的协方差=0。
利用以上知识就得到PCA降维的公式啦~~~~,详细推导过程见下所示:
样本集X=m×n矩阵,表示m个样例,n个特征维度
(1)协方差矩阵是一个实对称阵
(2)协方差矩阵的对角线上的元素是每个维度的方差
(3)协方差矩阵计算的是一个样本中不同维度之间的协方差,而不是两个或多个样本之间的协方差
因为协方差矩阵C是一个实对称阵,所以协方差矩阵C具有实对称阵的一些特征:
(1)协方差矩阵C可以对角化
(2)协方差矩阵C的特征值都是实数
(3)协方差矩阵C的特征向量都是实向量
(4)协方差矩阵C的相似对角阵上的元素=协方差矩阵C的特征值
(5)协方差矩阵C的不同特征值对应的特征向量是正交的!!!!
Λ 是一个对角矩阵,除了对角线λ1,λ2,....,λn是非零值,其他位置都是0。
训练样本集X理想的降维矩阵,应该是一个这样的矩阵:降维矩阵的每个维度特征都是线性无关的(即协方差为0),即降维特征的每个特征向量是正交的,集合上说就是垂直的,代数上说就是线性无关的。
下面我们假设:
训练数据集转换为理想的降维矩阵的公式为 Z=XU,U我们还不知道是什么,现在也不用知道U具体是什么,在下面2.6节会求出。
记我们得到训练样本集X理想的降维矩阵为Z,如下所示:
降维矩阵的每个维度特征都是线性无关的,也就是每个维度特征相互的协方差为0,即cov(X,Y)=0,则可知降维矩阵的协方差矩阵为一个对角阵,记降维矩阵Z的协方差矩阵为D,是一个对角阵,结果应该如下所示:
以前文章有介绍,协方差矩阵对角线上的值是对应维度特征的方差,其他位置上的值是对应俩维度特征的协方差,容易知道,除了对角线上值非0,其他位置上的协方差都为0,因为前面说了:降维矩阵的每个维度特征都是线性无关的,也就是每个维度特征相互的协方差为0,即cov(X,Y)=0。
可知
(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的求解结果~~~
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降维的计算步骤。
'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]])
中心化就是每个特征值减去所在维度特征的平均值。以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]]
C=[[ 108.32222222 74.53333333 -10.08888889]
[ 74.53333333 260.62222222 -106.4 ]
[ -10.08888889 -106.4 94.17777778]]
样本矩阵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]]
假设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)