【问题标题】:Dimensionality reduction using PCA - MATLAB使用 PCA 降维 - MATLAB
【发布时间】:2017-08-05 15:47:45
【问题描述】:

我正在尝试使用 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。

这两种方法似乎都产生了相似的结果(样本外测试错误),但存在差异,尽管差异可能很小。

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

【问题讨论】:

    标签: matlab machine-learning pca training-data dimensionality-reduction


    【解决方案1】:

    答案取决于您的数据,以及您想要做什么。

    使用你的变量名。一般来说很容易期望pca的输出保持

    U = train_x * V
    

    但这只有在您的数据被标准化的情况下才是正确的,特别是如果您已经从每个组件中移除了平均值。如果没有,那么可以期待的是

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

    在这方面,您想要在处理数据之前删除或保持数据平均值的天气取决于您的应用程序。

    另外值得注意的是,即使在处理前去掉均值,也可能会有一些小的差异,但会在浮点精度误差附近

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

    而且这个错误可以放心地忽略

    【讨论】:

    • 感谢您的回复。跟进:1)我使用数据进行岭回归 2)我在 PCA 阶段之后和岭回归之前对其进行归一化。但是即使没有归一化,均值的存在也不应该影响线性回归,对吧?
    • 是的,理论上任何非零均值数据只会抵消线性回归。您只应注意原始组件的方法与train_x * V 组件的方法不同。只要你记住这一点,而其余的标准化你应该没问题
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2013-03-06
    • 2013-12-31
    • 2015-08-19
    • 2015-02-28
    • 2019-07-21
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多