机器学习——PCA实例+matlab

假设有 m m m n n n 维数据构成矩阵 X n × m X_{n\times m } Xn×m:
X = ( − 1 − 1 0 2 0 − 2 0 0 1 1 ) X=\left( {\begin{matrix} { - 1}&{ - 1}&0&2&0\\ { - 2}&0&0&1&1 \end{matrix}} \right) X=(1210002101)先去均值

X=(X'-ones(size(X',1),1)*mean(X'))'

X = ( − 1 − 1 0 2 0 − 2 0 0 1 1 ) X=\left( {\begin{matrix} { - 1}&{ - 1}&0&2&0\\ { - 2}&0&0&1&1 \end{matrix}} \right) X=(1210002101)求协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT

C=1/5*X*X'

C = ( 1.2 0.8 0.8 1.2 ) C=\left( {\begin{matrix} {1.2}&{0.8}\\ {0.8}&{1.2} \end{matrix}} \right) C=(1.20.80.81.2)求特征值和特征向量,按特征值降序排列,矩阵 P P P 为特征向量按行排列

[c,lambda]=eig(C)   %c的列对应标准化后的特征向量,lambda的对角线元素对应特征值
lambda=diag(lambda)
[lambda,order]=sort(lambda,'descend')
for i=1:size(order)
    P(i,:)=c(:,order(i));
end

得到 P P P 后,用 P P P 的前 k k k 行乘以原始矩阵 X X X,就能得到需要降维后的矩阵 Y Y Y

Y=P(1,:)*X

A,B为二维向量,A与B的内积值等于A向B所在直线投影的矢量长度
要准确描述向量,要先确定一组基,然后给出在基所在的各个直线上的投影值
如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果
两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去
将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,推导一下D与C的关系可得 D = P C P T D=PCP^T D=PCPT
寻找一个矩阵P,满足 P C P T PCP^T PCPT 是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

总结:

PCA的本质相当于原始数据(B,每个样本向量按列排列)经过线性变换(A,每个基按行向量排列)投影到新的坐标系上,选择方差最大(分散程度高)协方差为零(方向之间不相关)的投影方向,也就是要求矩阵 P P P 对原始数据进行变化(Y=PX),得到新数据的协方差矩阵为对角阵(协方差为零),对角化可以由线性代数中的特征值和特征向量来求取,再根据特征值从大到小的顺序将对应特征向量按行从上往下排列构成矩阵 P P P

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值