【发布时间】:2019-11-06 08:21:35
【问题描述】:
我想在现有的基于 Matlab 的应用程序中使用来自第三方的一些 lasso 回归 python 代码,尽管我无法找出最等效的 Matlab 函数来使用。我也没有足够强大的回归模型背景来知道如何检查奇偶校验。
目标是将“z_ref”信号(一维 pandas 数据帧)拟合到“z_signal”信号(相同的维度/大小)。
这是我要转换的原始 python 代码:
from sklearn.linear_model import Lasso
lin = Lasso(alpha=0.0001,precompute=True,max_iter=1000,
positive=True, random_state=9999, selection='random')
lin.fit(z_ref, z_signal)
z_ref_fitted = lin.predict(z_ref).reshape(len(z_ref),1)
这是我第一次尝试等效的 Matlab 代码:
[B,fitInfo] = lasso(z_ref,z_signal,'Alpha',0.0001,'MaxIter',1000);
coeff = B(1);
intercept = fitInfo.Intercept(1);
z_ref_fitted = z_ref * coeff + intercept;
我不确定的主要事情是 sklearn 包的 python Lasso 和 .fit() 实现实际上在做什么。从这个 python 代码中,'lin' 对象似乎获得了一个截距和 coef 值,例如:
lin.intercept_
Out[33]: array([0.2758512])
lin.coef_
Out[34]: array([0.04887462])
但是,在 Matlab 中,我上面的代码会生成例如 B 作为 1x100 双精度数组,以及如下所示的“fitInfo”结构:
struct with fields:
Intercept: [1×100 double]
Lambda: [1×100 double]
Alpha: 1.0000e-04
DF: [1×100 double]
MSE: [1×100 double]
PredictorNames: {}
所以从简单的意义上说,我不确定我应该从 matlab 实现中使用什么 coef 和 intercept 值。在我上面尝试的代码中,我使用了每个数组中的第一个,它给出了与 Python 代码非常相似的结果(z_ref_fitted 输出看起来相似,但更小)。
任何关于 Python 代码更好的 Matlab 实现的指导,或者我应该研究的理论问题将不胜感激。
【问题讨论】: