我正在尝试编写自己的用于主成分分析的函数PCA(当然已经编写了很多东西,但我只是想自己实现一些东西)。我遇到的主要问题是交叉验证步骤和计算预测的平方和(PRESS)。我使用哪种交叉验证都没有关系,这主要是关于背后的理论的问题,但请考虑留一法交叉验证(LOOCV)。从理论上我发现,要执行LOOCV,您需要:
- 删除对象
- 扩展其余部分
- 使用一些组件执行PCA
- 根据(2)中获得的参数缩放删除的对象
- 根据PCA模型预测对象
- 计算该对象的压力
- 对其他对象重新执行相同的算法
- 汇总所有PRESS值
- 利润
因为我是该领域的新手,所以为了确定我是对的,我将结果与我所拥有的某些软件的输出进行比较(同样为了编写一些代码,我遵循该软件中的说明进行操作)。计算残差平方和,我得到完全相同的结果,但是计算PRESS是个问题。
您能否告诉我在交叉验证步骤中实施的方法是否正确:
case 'loocv'
% # n - number of objects
% # p - number of variables
% # vComponents - the number of components used in CV
dataSets = divideData(n,n);
% # it is just a variable responsible for creating datasets for CV
% # (for LOOCV datasets will be equal to [1, 2, 3, ... , n]);'
tempPRESS = zeros(n,vComponents);
for j = 1:n
Xmodel1 = X; % # X - n x p original matrix
Xmodel1(dataSets{j},:) = []; % # delete the object to be predicted
[Xmodel1,Xmodel1shift,Xmodel1div] = skScale(Xmodel1, 'Center', vCenter,
'Scaling', vScaling);
% # scale the data and extract the shift and scaling factor
Xmodel2 = X(dataSets{j},:); % # the object to be predicted
Xmodel2 = bsxfun(@minus,Xmodel2,Xmodel1shift); % # shift and scale the object
Xmodel2 = bsxfun(@rdivide,Xmodel2,Xmodel1div);
[Xscores2,Xloadings2] = myNipals(Xmodel1,0.00000001,vComponents);
% # the way to calculate the scores and loadings
% # Xscores2 - n x vComponents matrix
% # Xloadings2 - vComponents x p matrix
for i = 1:vComponents
tempPRESS(j,i) = sum(sum((Xmodel2* ...
(eye(p) - transpose(Xloadings2(1:i,:))*Xloadings2(1:i,:))).^2));
end
end
PRESS = sum(tempPRESS,1);
在软件(PLS_Toolbox)中,它的工作方式如下:
for i = 1:vComponents
tempPCA = eye(p) - transpose(Xloadings2(1:i,:))*Xloadings2(1:i,:);
for kk = 1:p
tempRepmat(:,kk) = -(1/tempPCA(kk,kk))*tempPCA(:,kk);
% # this I do not understand
tempRepmat(kk,kk) = -1;
% # here is some normalization that I do not get
end
tempPRESS(j,i) = sum(sum((Xmodel2*tempRepmat).^2));
end
因此,他们使用此tempRepmat
变量进行了一些其他的归一化处理:我发现的唯一原因是,他们将LOOCV应用于健壮的PCA。不幸的是,支持团队不想回答我的问题,因为我只有他们软件的演示版。
tempRepmat(kk,kk) = -1
line 的作用是什么?上一行是否已经确保tempRepmat(kk,kk)
等于-1?还有,为什么要减少?该错误仍然会被平方,所以我是否正确理解,如果消除了这些缺点,什么都不会改变?