matlab训练样本如何设置,matlab_PCA,训练集与测试集分开,原理和用法
发布日期:2022-02-18 13:19:53 浏览次数:11 分类:技术文章

本文共 899 字,大约阅读时间需要 2 分钟。

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

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

转载地址:https://blog.csdn.net/weixin_28926205/article/details/116186165 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:matlab simple,[求助]Matlab2016b里没有simple函数
下一篇:php用户禁用代码,php – 通过代码禁用Magento产品

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月24日 02时21分50秒