图形LASSO中算法解决方案和MATLAB CVX解决方案的区别?
Posted
技术标签:
【中文标题】图形LASSO中算法解决方案和MATLAB CVX解决方案的区别?【英文标题】:Difference between algorithm solution and MATLAB CVX solution in Graphical LASSO? 【发布时间】:2021-07-05 11:27:57 【问题描述】:Graphical Least Absolute Shrinkage and Selection Operator,由 Jerome Friedman、Trevor Hastie 和 Robert Tibshirani 介绍(“Sparse inverse covariance estimation with the graphics lasso”,2014 年)。他们建议使用块坐标下降算法来解决问题(参见 Rahul Mazumder 和 Trevor Hastie 的“The Graphical Lasso: New Insights and Alternatives”)。给定X
(大小为m,n
的回归矩阵),我使用CVX编写了这个简单的MATLAB代码:
S = cov(X,0);
cvx_begin
variable theta(n,n) semidefinite
minimize (trace(S*theta)-log_det(theta)+lambda*norm(theta,1))
cvx_end
块坐标下降算法解决方案和CVX解决方案有什么区别? CVX 可以设置为提供完全相同的解决方案吗? 该问题涉及图形 LASSO 算法,但可以扩展到其他类似问题,其中作者提出特定算法(例如 ADMM),但可以通过优化包找到解决方案。
【问题讨论】:
【参考方案1】:提供
-
有一个独特的解决方案(如果您的目标是正则化的,这应该是正确的,它似乎是最后一个术语。)
这两种实现都没有错误。
两种实现都应该返回完全相同的解决方案,因为问题是凸半定程序。您应该注意的区别是
-
运行时,一个可能会比另一个运行时间更长,我敢打赌您的实现使用通用求解器包 (CVX),因此应该会更慢。
内存使用情况,我希望通用(未调整)包应该消耗更多内存。
数值稳定性,一般来说,一些实现在数值上会更加稳定。也就是说,如果您使用弱正则化(非常小的 lambda),您可能会发现某些实现无法收敛,而其他实现仍然有效。
对于小型和玩具问题,这应该不是什么大问题(如果您是一名学者,通常就是这种情况。)如果您是一个试图在现实世界中做一些有用的事情的人,运行时和内存使用往往是非常重要,因为它们控制着你可以用你的方法解决的规模问题。
了解每种方法的相对限制的唯一方法是实现并尝试两种方法!至少,我会实施并运行这两种方法,作为一种健全性检查,以确保两种实施都可能正确(两种实施都不正确并在输入范围内报告相同结果的可能性非常低。)
【讨论】:
其实我试过了:rng(1); X = -rand(16,8)+rand(16,8); X = round(X,4); writematrix(X,'coniglio.csv'); n = size(X,1); p = size(X,2); S = cov(X,0); lambda = 0.01; cvx_begin variable theta(p,p) semidefinite minimize (trace(S*theta)-log_det(theta)+lambda*norm(theta,1)) cvx_end
并将输出与 R 中原始函数“glasso”的 R 输出进行了比较,具有相同的数据和相同的 lambda (out = glasso(S, lambda)
)。结果矩阵非常不同:例如,第一个元素(第一个协变量的正则化方差)在 MATLAB 中是 6.1559,而在 R 中使用 glasso 函数是 5.2967。即使对于学术来说,这也是一件大事。是什么导致了这种差异?迭代算法逼近?
我建议的第一件事是阅读目标glasso
最小化的细节。您可能会最小化两个不同(可能略有不同)的目标。
还验证您的数据输入在两个实现之间实际上是相同的,例如它可能的 matlab 和 R 计算 cov
不同。打印出每个输入值并仔细检查它在两个实现中是否相同。以上是关于图形LASSO中算法解决方案和MATLAB CVX解决方案的区别?的主要内容,如果未能解决你的问题,请参考以下文章