matlab pca和逆pca函数,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器学习中,我们通常需要将数据集分为训练集测试集训练集用于训练模型,而测试集用于评估模型的性能。这样做的目的是为了避免过拟合(overfitting)的情况发生,即模型在训练集上表现很好,但在测试集上表现很差的情况。 在 MATLAB 中,我们可以使用 `crossvalind` 函数将数据集分成训练集测试集。例如,下面的代码将数据集划分为训练集测试集,其中训练集占 70%,测试集占 30%: ```matlab data = load('data.mat'); n = size(data, 1); % 数据集的样本数量 p = 0.7; % 训练集所占比例 idx = crossvalind('HoldOut', n, p); % 随机划分训练集测试集 train_data = data(idx, :); % 训练集 test_data = data(~idx, :); % 测试集 ``` 另外,PCA(Principal Component Analysis,主成分分析)是一种常用的降维技术,在 MATLAB 中也有相应的函数。使用 PCA 可以将高维数据降维到低维空间,减少特征数量,从而提高模型的效率和准确率。 例如,下面的代码演示了如何使用 PCA 对数据集进行降维: ```matlab data = load('data.mat'); X = data(:, 1:end-1); % 特征矩阵 Y = data(:, end); % 标签向量 [coeff,score,latent] = pca(X); % PCA n_components = 2; % 降维到 2 维 X_new = score(:, 1:n_components); % 新的特征矩阵 data_new = [X_new, Y]; % 新的数据集 ``` 在上面的代码中,`pca` 函数返回三个参数:`coeff` 表示主成分的系数,`score` 表示样本在主成分上的投影,`latent` 表示每个主成分的方差贡献。我们可以通过设置 `n_components` 参数来控制降维后的特征数量。最后,将新的特征矩阵和标签向量合并成新的数据集。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值