不完整的数据的加权优化CP张量分解

我们解释如何使用cp_wopt波布拉诺椒工具箱呈深绿色。本文中描述的方法是:

e . Acar d . m .《t . g . Kolda和m . Mørup可伸缩的张量分解为不完整的数据,化学计量学和智能实验室系统106(1):41-56,2011年3月(doi: 10.1016 / j.chemolab.2010.08.004)

内容

重要的信息

它至关重要零值在失踪的张量数据的条目。这可以通过调用完成cp_wopt (x * P, P,…)。这是一个经常使用这种方法的误差来源。

缺失的数据创建一个示例问题。

这里有25%的缺失数据和10%的噪音。

R = 2;信息= create_problem (“大小”(15 10 5),“Num_Factors”R“米”,0.25,“噪音”,0.10);X = info.Data;P = info.Pattern;M_true = info.Soln;

使用“nvecs”创建初始猜测

M_init = create_guess (“数据”,X,“Num_Factors”R“Factor_Generator”,“nvecs”);

建立了优化参数

genearlly是个好主意考虑的参数优化方法。默认选项可能太严格或者不够严格。这里最重要的需要考虑的选项有详细。

%得到默认值ncg_opts = ncg (“违约”);%收紧停止宽容(梯度的标准)。这通常是太大。ncg_opts。StopTol = 1.0 e-6;%收紧相对tolearnce函数值的变化。这通常是太大。ncg_opts。RelFuncTol = 1.0 e-20;%增加迭代的数量。ncg_opts。MaxIters = 10 ^ 4;%只显示每10迭代ncg_opts。DisplayIters = 10;%显示最后一组选项ncg_opts
ncg_opts =结构体字段:显示:“iter”DisplayIters: 10 LineSearch_ftol: 1.0000 e-04 LineSearch_gtol: 0.0100 LineSearch_initialstep: 1 LineSearch_maxfev: 20 LineSearch_method:“more-thuente”LineSearch_stpmax: 1.0000 e + 15 LineSearch_stpmin: 1.0000 e15汽油LineSearch_xtol: 1.0000 e15汽油MaxFuncEvals: 10000 MaxIters: 10000 RelFuncTol: 1.0000 e-20 RestartIters: 20 RestartNW: 0 RestartNWTol: 0.1000 StopTol: 1.0000 e-06 TraceFunc: 0 TraceFuncEvals: 0 TraceGrad: 0 TraceGradNorm: 0 TraceRelFunc: 0 TraceX: 0更新:“公关”

调用cp_wopt方法

这里有一个例子调用cp_opt方法。默认情况下,每个迭代输出的最小二乘拟合函数值(最小)和梯度的规范。任何线搜索的意义可以通过检查警告医生cvsrch

[M, ~,输出]= cp_wopt (X, P, R,“init”M_init,“选择”,“ncg”,“opt_options”,ncg_opts);
运行CP-WOPT……时间归零的蒙面条目7.52 e-04秒张量数据。(如果归零法进行预处理,设置“skip_zeroing”真)。Iter FuncEvals F (X) | | G (X) | | / N - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 1 10 37 3.20399740 0.01068598 74 1.86647166 0.01496155 42.12686745 - 0.23070139 102 122 1.75699489 0.00030707 1.75795458 - 0.00124314 164 202 0.62497618 0.03131283 1.59387469 - 0.03315542 70 229 0.34450247 0.00826425 0.31352609 - 0.00161307 80 254 90 275 0.31288321 0.00018934 0.31287112 - 0.00003616 100 295 110 315 120 335 0.31287058 0.00000100 0.31287061 - 0.00000820

检查输出

重要的是要检查优化方法的输出。特别是,它是值得的检查出口标志。零(0)表明成功与梯度小于指定的StopTol终止,终止和三(3)表明一个成功,函数值的变化小于RelFuncTol。可以通过检查任何其他标志的含义医生poblano_params

exitflag = output.ExitFlag
exitflag = 0

评估的输出

我们可以“分数”模型的相似性计算CP和比较的真理。的分数函数在ktensor会给出一个分数在[0,1]1表示一个完美的匹配。因为我们有噪音,我们并不指望适合完美。看到医生得分为更多的细节。

可控硅=分数(M, M_true)
可控硅= 0.9841

创建一个缺失的数据稀疏的示例问题。

这里有95%的缺失数据和10%的噪音。

R = 2;信息= create_problem (“大小”(150 100),“Num_Factors”R“米”,0.95,“Sparse_M”,真的,“噪音”,0.10);X = info.Data;P = info.Pattern;M_true = info.Soln;

使用“nvecs”创建初始猜测

M_init = create_guess (“数据”,X,“Num_Factors”R“Factor_Generator”,“nvecs”);

建立了优化参数

genearlly是个好主意考虑的参数优化方法。默认选项可能太严格或者不够严格。这里最重要的需要考虑的选项有详细。

%得到默认值ncg_opts = ncg (“违约”);%收紧停止宽容(梯度的标准)。这通常是太大。ncg_opts。StopTol = 1.0 e-6;%收紧相对tolearnce函数值的变化。这通常是太大。ncg_opts。RelFuncTol = 1.0 e-20;%增加迭代的数量。ncg_opts。MaxIters = 10 ^ 4;%只显示每10迭代ncg_opts。DisplayIters = 10;%显示最后一组选项ncg_opts
ncg_opts =结构体字段:显示:“iter”DisplayIters: 10 LineSearch_ftol: 1.0000 e-04 LineSearch_gtol: 0.0100 LineSearch_initialstep: 1 LineSearch_maxfev: 20 LineSearch_method:“more-thuente”LineSearch_stpmax: 1.0000 e + 15 LineSearch_stpmin: 1.0000 e15汽油LineSearch_xtol: 1.0000 e15汽油MaxFuncEvals: 10000 MaxIters: 10000 RelFuncTol: 1.0000 e-20 RestartIters: 20 RestartNW: 0 RestartNWTol: 0.1000 StopTol: 1.0000 e-06 TraceFunc: 0 TraceFuncEvals: 0 TraceGrad: 0 TraceGradNorm: 0 TraceRelFunc: 0 TraceX: 0更新:“公关”

调用cp_wopt方法

这里有一个例子调用cp_opt方法。默认情况下,每个迭代输出的最小二乘拟合函数值(最小)和梯度的规范。任何线搜索的意义可以通过检查警告医生cvsrch

[M, ~,输出]= cp_wopt (X, P, R,“init”M_init,“选择”,“ncg”,“opt_options”,ncg_opts);
运行CP-WOPT……时间归零的蒙面条目3.01 e-02秒张量数据。(如果归零法进行预处理,设置“skip_zeroing”真)。Iter FuncEvals F (X) | | G (X) | | / N - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 51 10 0 1 561.51059983 0.01729762 17.54710510 - 0.00825676 149 82 16.81335392 0.00164784 112 16.63583752 0.00182422 16.09905940 0.00369331 50 60 223 186 12.61496613 0.01236469 5.78600003 0.00503093 5.42873077 - 0.00059175 70 251 80 274 5.42075260 0.00006912 5.42061561 - 0.00001694 90 294 100 314 102 318 5.42061122 0.00000084 5.42061124 - 0.00000194

检查输出

重要的是要检查优化方法的输出。特别是,它是值得的检查出口标志。零(0)表明成功与梯度小于指定的StopTol终止,终止和三(3)表明一个成功,函数值的变化小于RelFuncTol。可以通过检查任何其他标志的含义医生poblano_params

exitflag = output.ExitFlag
exitflag = 0

评估的输出

我们可以“分数”模型的相似性计算CP和比较的真理。的分数函数在ktensor会给出一个分数在[0,1]1表示一个完美的匹配。因为我们有噪音,我们并不指望适合完美。看到医生得分为更多的细节。

可控硅=分数(M, M_true)
可控硅= 0.9972