首页 文章

使用PCA - MATLAB降低尺寸

提问于
浏览
1

我正在尝试使用PCA降低训练集的维度 . 我遇到过两种方法 .

[V,U,eigen]=pca(train_x);
eigen_sum=0;
for lamda=1:length(eigen)
     eigen_sum=eigen_sum+eigen(lamda,1);
     if(eigen_sum/sum(eigen)>=0.90)
           break;
     end    

end
train_x=train_x*V(:, 1:lamda);

在这里,我简单地使用特征值矩阵来重建训练集,其具有由描述原始集合的90%的主成分确定的较少量的特征 .

我发现的替代方法几乎完全相同,保存最后一行,更改为:

train_x=U(:,1:lamda);

换句话说,我们将训练集作为原始训练集的主要组成部分表示为某些特征lamda .

这两种方法似乎都产生了类似的结果(样本测试错误),但是存在差异,但可能是微不足道的 .

我的问题是,哪一个是正确的方法?

1 回答

  • 1

    答案取决于您的数据以及您想要做的事情 .

    使用您的变量名称 . 一般来说很容易期望 pca 的输出保持不变

    U = train_x * V
    

    但是,只有在数据标准化的情况下才会出现这种情况,特别是如果您已经从每个组件中删除了均值 . 如果没有,那么人们可以期待的是

    U = train_x * V - mean(train_x * V)
    

    在这方面,您希望在处理数据之前删除或维护数据的平均值取决于您的应用程序 .

    值得注意的是,即使你在处理之前删除了均值,也可能会有一些小的差异,但它会围绕浮点精度误差

    ((train_x * V) - U) ./ U ~~ 1.0e-15
    

    并且可以安全地忽略此错误

相关问题