我正在写一篇论文,其中一部分是应用验证规则来找出有多少主成分给我们带来最小的泛化错误。
这个概念或多或少是这样的:“鉴于模型的维度减少了,我们将窗口大小重置为 60 天以避免过度拟合问题。使用 60 天的训练集在前 20 个组件中运行多元线性回归后,我们发现前 12 个分量在 30 个测试日的泛化误差最小。最后,我们计算样本内和样本外残差。
请注意,完整主成分矩阵的维度为 483(天)X 482(值)。
实现确实是微不足道的,但我正在扼杀如何为任何这些情况“选择”正确的子矩阵。
欢迎所有建议(包括 matlab 代码)。
编辑: 使用下面提到的 Arnold Neumaier的交叉验证提示,并且假设我已经实现了将初始数据集拆分为多个部分的功能,以下解决方案是否部分解决了问题?接下来我该怎么办?
for i=1:1:10
training_set = ex1_data_txt(find(split_assignments(:,i)==0),:);
test_set = ex1_data_txt(find(split_assignments(:,i)==1),:);
% determine weights from the training set
phi_train=[training_set(:,1).^(0) training_set(:,1).^(1)];
w=pinv(phi_train)*training_set(:,2);
phi_test=[test_set(:,1).^(0) test_set(:,1).^(1)];
% apply learned weights to the test set and compute MSE
MSE(i)=sum((test_set(:,2)-phi_test*w).^2)/size(test_set,1);
end