我正在尝试使用 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 提取一组特征并将它们放入一个矩阵中,该矩阵为您提供 PCALoadings
和 PCAScores
。拉出前两个主成分及其载荷,并将它们放入自己的矩阵中:
W = PCALoadings(:, 1:2)
Z = PCAScores(:, 1:2)
X
和Z
之间的关系是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)
现在您想要使用该回归来根据 X
对 y
进行预测。将等式 (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/