matlab - Matlab主成分回归(pcr)分析中的常数项

标签 matlab components regression principal

我正在尝试使用 Matlab 学习主成分回归 (pcr)。我在这里使用本指南:http://www.mathworks.fr/help/stats/examples/partial-least-squares-regression-and-principal-components-regression.html

真的很好,就是一步看不懂:

我们进行 PCA 和回归,非常清晰:

[PCALoadings,PCAScores,PCAVar] = princomp(X);
betaPCR = regress(y-mean(y), PCAScores(:,1:2));

然后我们调整第一个系数:

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

为什么常数系数需要是 'mean(y) - mean(X)*betaPCR'?你能给我解释一下吗?

提前致谢!

最佳答案

这真的是一道数学题,不是编程题。您的 PCA 提取一组特征并将它们放入一个矩阵中,该矩阵为您提供 PCALoadingsPCAScores。拉出前两个主成分及其载荷,并将它们放入自己的矩阵中:

W = PCALoadings(:, 1:2)
Z = PCAScores(:, 1:2)

XZ之间的关系是X可以近似为:

Z = (X - mean(X)) * W      <=>      X ~ mean(X) + Z * W'                  (1)

直觉是Z捕获了X中的大部分“重要信息”,而矩阵W告诉你如何在两者之间进行转换两种表示。

现在您可以对 Z 进行 y 的回归。首先,您必须从 y 中减去平均值,以便左侧和右侧的平均值都为零:

y - mean(y) = Z * beta + errors                                           (2)

现在您想要使用该回归来根据 Xy 进行预测。将等式 (1) 代入等式 (2) 得到

y - mean(y) = (X - mean(X)) * W * beta

            = (X - mean(X)) * beta1

我们在其中定义了 beta1 = W * beta(您在第三行代码中执行此操作)。重新排列:

y = mean(y) - mean(X) * beta1 + X * beta1

  = [ones(n,1) X] * [mean(y) - mean(X) * beta1; beta1]

  = [ones(n,1) X] * betaPCR

如果我们定义它就可以了

betaPCR = [mean(y) - mean(X) * beta1; beta1]

在您的第四行代码中。

关于matlab - Matlab主成分回归(pcr)分析中的常数项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11342759/

相关文章:

python - Python 中的回归

javascript - 使用 React Hooks 的倒数计时器

vue.js - Vuejs 路由器链接到子组件

html - Vue.js:无法使用 CSS 媒体查询隐藏带有侧边栏的 div

python - python中岭回归的p值

machine-learning - 使用 tflearn 进行回归的神经网络

java - 将 vector 从 Matlab 传递到 Scala 类

matlab - 查找直线上某个点的坐标

matlab - 如何在指定秒数后中断 MATLAB 系统调用

windows - 如何使用 sys/ioctl.h 将代码移植到 MinGW gcc?