如何使用 PCA 进行预测?

机器算法验证 回归 主成分分析 matlab
2022-03-28 21:17:20

我对 PCA 有一些疑问。我有 318 个观测值,包含 10 个变量和一个响应,这是我想用于训练和构建模型的数据集。我做了 PCA,发现前 5 个 PC 占方差的 96%,所以我打算将这 5 个用于模型。Matlab 帮助中,回归完成如下:

betaPCR = regress(y-mean(y), PCAScores(:,1:5)); 

但是随后将系数转换为原始的未居中变量:

betaPCR = PCALoadings(:,1:5)*betaPCR;
betaPCR = [mean(y) - mean(X)*betaPCR; betaPCR];
yfitPCR = [ones(n,1) X]*betaPCR;

我的问题是:如何找到模型以及如何将其应用于新的测试数据集(100 个观察值,10 个变量和一个响应)?我应该使用转换后的系数,并且预测y会居中吗?如何使用betaPCR新数据的计算结果?

3个回答

看起来你有 418 个案例,分为 318 个案例的训练集和 100 个案例的测试集。我将回答您的问题,并建议一种密切相关但可能更好的方法来解决您的问题。

正如 MATLAB帮助页面上所述,对于 PCR,最好将预测变量居中并按单位方差缩放,这样比例差异就不会过度加权结果。他们在他们的示例中没有这样做,但如果您的预测变量在不同的尺度上,那么除了居中之外,您还可以考虑缩放。

您从该页面改编的代码显然会将回归返回到的原始比例,具体取决于该页面上的绘图是如何获得的(尽管我对 MATLAB 语法的记忆太生疏了,无法直接验证)。用您的测试数据矩阵替换最后一行代码中的应该可以为您提供这些测试数据的预测值。要验证,请尝试使用的原始数据的小样本,看看预测是否有意义。xyXyX

但是带有训练集和单独测试集的 PCR 可能不是解决问题的最佳方法。PCR 选择捕获预测变量中最大方差的主成分,但不一定是那些与响应变量最相关的主成分。同一帮助页面上说明的偏最小二乘法可以更好地与结果相关。此外,将训练集和测试集分离(如果您这样做的话)并不能有效地使用数据中的所有信息。

由 MATLAB 中的函数提供的岭回归ridge本质上是 PCR,但在组件上放置了不同的权重,而不是 PCR 中的全或全选择。对预测结果没有多大帮助的大回归系数会受到惩罚。这有助于使系数更好地与结果变量的关系保持一致,并有助于纠正过度拟合。您可以从所有数据开始建立模型(如果我对您所做的事情的理解是正确的),然后使用交叉验证或引导来选择最小化预测误差的惩罚。

这里有一些方法可以测试您对计算的理解是否正确:

  • 拿几个训练案例,按照你的想法计算预测。然后与帮助页面中的拟合值进行比较。
  • 如果您使用完整的 PCA 模型(所有载荷),则 PCA 仅执行数据的旋转。基于所有分数的预测应与原始数据的最小二乘回归预测相匹配。
  • 您可以通过一个或两个步骤进行 PCR:要确定您直接从原始数据到拟合值的一步预测是否正确,请将其与首先计算新数据的分数然​​后预测 y 的两步过程进行比较从分数。

请注意,如果 PCA 拟合例程集中(并可能缩放)数据,则您也需要对新案例执行此操作。是的,如果回归设置为 predict y - mean (y),那么预测值将以ys 的平均值为中心。然后,您需要居中并可能按中心缩放,并在训练X中计算缩放,这同样适用于. Xy

我不是 Matlab 用户,但您从错误的角度处理问题。PCA 不应该用来帮助过度拟合——正则化是一个合适的工具。这样您就不会丢弃数据,并且您很可能最终得到一个更容易解释的模型(例如,对于您的原始变量,而不是转换后的变量,特征重要性或权重)。