PLS_Toolbox 常见问答(二)

问:为什么我无法重新编译 PLS_Toolbox 的函数?

答: 我们时常收到关于重新编译 PLS_Toolbox 函数的询问,例如:

“我购买了 PLS_Toolbox 和 MathWorks MATLAB Compiler 的许可证,为什么我不能自由编译 PLS_Toolbox 的部分函数?”

购买 MATLAB Compiler 仅赋予您重新编译和分发 MathWorks 公司知识产权的 .m 文件编译版本的许可证。但这并不授予您重新编译和分发 Eigenvector Research 公司知识产权的 .m 文件编译版本的权利。

当 MathWorks 销售 Compiler 时,我们未从中获得报酬。如果我们允许未经许可重新编译和重新分发我们的代码,我们很快就会无法继续经营,因为拥有 PLS_Toolbox 和 MATLAB Compiler 的人都可以随意分发我们的产品副本。

然而,我们确实提供重新编译许可证。如需了解用于内部或外部使用的 PLS_Toolbox 部分函数重新编译的更多信息,请参阅以下页面:

  • EigenBlog:编译 PLS_Toolbox

  • 如何获取或使用 PLS_Toolbox 的重新编译许可证?

 

问:为什么 PLS_Toolbox 的 boxplot 函数与 MathWorks Statistics Toolbox 中同名函数冲突?

答: Eigenvector Research(EVRI)的 DataSet 对象与 MathWorks Statistics Toolbox 中同名对象长期存在冲突。

在大多数版本的 MathWorks Statistics Toolbox 中,boxplot 是仅有的使用 MathWorks dataset 对象的函数(相比之下,PLS_Toolbox 中 65%–75% 的函数使用 EVRI 的 DataSet 对象)。这意味着将 MathWorks dataset 对象置于路径顶部会破坏 EVRI 的大部分代码,而将 EVRI 的对象置于路径顶部只会破坏那一个函数(以及使用 MathWorks dataset 对象的用户代码)。

我们努力使两个 DataSet 对象尽可能兼容,但 MathWorks dataset 对象的某些功能我们未纳入,或与现有对象的工作方式冲突。结果是两个对象不兼容

鉴于没有其他办法,EVRI 决定创建自己的 boxplot 函数来重载 Statistics Toolbox 的同名函数。我们的 boxplot 覆盖了 MathWorks boxplot 的大部分功能,但并非全部。如果您发现缺少任意关键行为,请联系并告知我们。

只要 PLS_Toolbox 位于 MATLAB 路径顶部,就会使用我们的 boxplot 函数。

如需使用 MathWorks 的 boxplot 函数:

  1. 先将 PLS_Toolbox 移到路径底部(或彻底移除)

  2. 然后输入指令:
    >> clear classes

    注意:此指令将去除内存中所有变量,但这是切换 Eigenvector 和 MathWorks DataSet 对象的仅有方法。

 

问:如何从 PLS 或 PLSDA 模型计算得分?

答: 由于 PLS 模型中权重和载荷之间存在特殊关系,新数据的得分计算并不像 PCR 或 PCA 那样简单地投影到载荷上(即 T_new = X_new * P)。对于新数据 X_new,得分的计算公式为:

T_new = X_new * W * (P^T * W)^(-1)

其中 W 为 PLS 模型权重矩阵,P 为 PLS 模型载荷矩阵。

在 MATLAB 表示法中:>> scores = x * W * pinv(P' * W)
其中 x 为新数据。对于名为 model 的标准 PLS_Toolbox 模型结构,W 和 P 的定义为:

>> P = model.loads{2,1}

>> W = model.wts
 

问:PLS_Toolbox 和 Solo 中的 PCA 交叉验证如何工作?如何配置指令行选项以获得更好结果?

答: PCA 交叉验证的缺失数据方法

PLS_Toolbox 和 Solo 中的 PCA 交叉验证与其他软件包有显著不同。它采用缺失数据方法进行交叉验证:测试 PCA 模型在补全被剔除样本中缺失列时的表现(即同时剔除样本和变量)。这能评估 PCA 模型拟合系统信息(用于补全缺失变量)相对于噪声(在补全缺失变量时无用或者有害)的结果。这种方法比标准残差检验更具诊断性,后者会持续下降并渐近趋近于零。

有关该方法及其与其他 PCA 交叉验证方法比较的说明,请参见:
R. Bro, K. Kjeldahl, A. K. Smilde, H. A. L. Kiers《组分模型交叉验证:对当前方法的批判性审视》,《分析与生物分析化学》,2008 年 3 月,第 390 卷,第 5 期,第 1241–1251 页。

PCA 交叉验证的指令行设置

PCA 的交叉验证方法独特,因此在调用 crossval 函数时,需要同时定义剔除样本的模式(crossval 的 cvi 输入)和剔除变量的模式(由 options 输入中的 pcacvi 选项定义)。crossval 的输入输出为:>> results = crossval(x, y, rm, cvi, ncomp, options);

默认情况下,pcacvi 选项为 'loo'(每次剔除一个变量)。因此,对于每组样本拆分,crossval 会将数据进一步拆分为与变量数相等的组数。

在分析窗口中,我们使用以下逻辑确定 pcacvi

>> if n > 25;

      cvopts.pcacvi = {'con' min(10, floor(sqrt(n)))};

    else

      cvopts.pcacvi = {'loo'}; 

    end

即:如果变量数 ≤ 25,则采用“留一法”;否则采用连续分块留出法,分块数为变量数平方根与 10 中的较小值。

建议在调用 crossval 时修改 pcacvi 选项以优化准确性和速度:

>> opts        = crossval('options');

>> opts.pcacvi = {'con' 10};

>> results     = crossval(x, [], 'pca', {'con' 5}, 15, opts);

 

问:PLS_Toolbox 与 MathWorks 工具箱是否存在函数冲突?

答: PLS_Toolbox 中有多个文件与 MathWorks 某些工具箱中的文件同名。发生冲突时,MATLAB 仅能使用位于路径中较前位置的文件(可使用 pathtool 查看和编辑 MATLAB 路径)。

已知冲突列表:

PLS_Toolbox 函数 冲突来源路径
boxplot.m toolbox/stats/stats
cluster.m toolbox/stats/stats
crossval.m toolbox/stats/stats
dbscan.m toolbox/stats/stats
gram.m toolbox/control/ctrlobsolete
mcr.m toolbox/compiler
pca.m toolbox/stats/stats
rescale.m toolbox/matlab/datafun
ridge.m toolbox/stats/stats
rmse.m toolbox/matlab/datafun
tsne.m toolbox/stats/stats
dataset2table.m toolbox/shared/statslib
dendrogram.m toolbox/stats/stats
doc.m toolbox/matlab/helptools
encode.m toolbox/comm/comm
minmax.m toolbox/nnet/nnet/nndatafun
range.m toolbox/stats/stats
struct2dataset.m toolbox/shared/statslib
table2dataset.m toolbox/shared/statslib
kstest.m toolbox/stats/stats
kurtosis.m toolbox/stats/stats
signtest.m toolbox/stats/stats
skewness.m toolbox/stats/stats

此外,Statistics and Machine Learning Toolbox 中的 dataset 对象与 Eigenvector 的 DataSet 对象冲突。如需使用 MathWorks 的 dataset 对象,需将 PLS_Toolbox 移到路径底部(或移除),然后执行:>> clear classes

(此指令将清除内存中所有变量,但这是切换 DataSet 对象的仅有方法。)

建议指令:

  • 将 PLS_Toolbox 移到路径底部:>> evrimovepath('bottom')

  • 将 PLS_Toolbox 移到路径顶部:>> evrimovepath('top')
     

问:部分或全部 PLS_Toolbox 函数无法工作,怎么办?

答: 请尝试在 MATLAB 指令行运行 evridebug 函数诊断问题:>> evridebug

该函数会检查 PLS_Toolbox 安装并报告可能的问题,例如文件被同名文件“遮蔽”(shadowed)。输出结果将帮助您确定具体的安装问题。

如果 MATLAB 找不到 evridebug 函数,会显示:??? Undefined function or variable 'evridebug'.

此时请将当前工作目录切换到 PLS_Toolbox 目录,然后重新运行 evridebug。若仍无法解决,建议重新安装 PLS_Toolbox 。

 

 

查看PLS_Toolbox软件详情

热门资讯

2026-08-14 15:00
首页    技术文档    PLS_Toolbox 常见问答(二)