我在使用Matlab中的plsregress作为执行LDA之前的特征降维方法。我试图交叉验证我的方法,但在复制他们的“数据处理”阶段时遇到了一些问题。
plsregress使用SIMPLS算法,首先通过减去列均值来对X和Y进行中心化处理,得到中心化变量X0和Y0。然而,它并不对列进行重新缩放。要使用标准化变量执行PLS,请使用zscore来标准化X和Y。
为了在我的“测试”集上尝试复制这一过程,我做了以下操作:
test = test - repmat(mean(test), DIM(1), 1);test = Xloadings\test';test = test';
不知为何,这并不完全奏效,当应用于训练集时,我无法获得相同的Xscores。
有谁能解释我是否遗漏了某个步骤,或者我做错了什么吗?
编辑:换句话说,如何将PLS生成的模型应用于另一个数据集?
回答:
我想你需要使用训练集的均值,而不是测试集的。这也适用于sigma的标准化。
使用[Z,mu,sigma] = zscore(train)。将mu和sigma应用于测试集。