matlab将数据集分成训练集和测试集,matlab_PCA,训练集与测试集分开,原理和用法...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

PCA基本流程:

1、训练集矩阵算协方差矩阵A;

2、算协方差矩阵特征值与特征向量;

3、按特征值的大小排列特征矩阵,得B,对应的特征值(按从大到小排列)组成向量a;

4、A*B得到去关联的新矩阵C,A与C的对应位置物理意义相同(指样本维度和样本数),但是去掉了关联,并且按特征贡献度大小排列;

5、选贡献度百分比或降维后的维度。例如百分之90,则是取满足sum(a(1:n))/sum(a)>90%的最小的n;如果直接定降维后的维度,则直接设置个n。

6、任一样本的降维公式相同,对于样本x:x*B(1:n,:)。

原理说明:步骤3,4本质上是基变换原理。4可以去关联的原理与马氏距离相仿。贡献度的原理与协方差矩阵的数学意义相关。转换矩阵相关的计算必须在训练集上完成是因为协方差矩阵的计算需要一个样本集,如将测试集样本加入这个样本集,则训练集中已经包含了测试集信息(例如某一维特征的均值)。

matlab函数说明:

[COEFF, SCORE, LATENT] = pca(X);

COEFF:步骤3算出来的矩阵B,本质上是一个基变换矩阵。数学意义是协方差矩阵按特征值的大小排列的特征矩阵。

SCORE:步骤4算出来的矩阵C,与A同维同物理意义。

LATENT:步骤3算出来的向量a,存储了贡献度,数学意义是协方差矩阵特征值从大到小排列。

用途:根据LATENT计算满足某贡献度所需的样本维度,或直接定一个样本维度,然后

x*COEFF(1:n,:)降维。

把训练集中所有样本计算x*COEFF就是SCORE,当然,x*COEFF(1:n,:)这个式子更大的用途是计算测试集中的样本。

以上全是废话,这里是关键的:

pca内建函数在算协方差的时候先减了个样本均值,所以这里x*COEFF不是SCORE

需要先算

x0 = bsxfun(@minus,train_data,mean(train_data,1));

x0 = bsxfun(@minus,test_data,mean(test_data,1));

然后x0*x*COEFF才是SCORE

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值