【问题标题】:How can I translate this python lasso regression code into Matlab?如何将这个 python 套索回归代码翻译成 Matlab?
【发布时间】: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 实现的指导,或者我应该研究的理论问题将不胜感激。

【问题讨论】:

    标签: python matlab


    【解决方案1】:

    您在 Python 代码中为 Lasso() 设置的 alpha 用于正则化参数。 您在 matlab 代码中为 lasso() 设置的 alpha 用于 lasso 与岭优化的权重。 由于您没有在matlab lasso() 中设置正则化参数,所以默认情况下,lasso 使用 Lambda 值的几何序列进行 lasso 正则化,结果为 100 列向量,每列是每个 Lambda 值对应的结果

    您应该像这样更改您的 matlab 代码 [B,fitInfo] = lasso(z_ref,z_signal,'Lambda',0.0001,'MaxIter',1000);

    希望得到帮助:)

    【讨论】:

    • 感谢 Forte!这似乎使结果更具可比性。我将不得不进一步调查以确保
    • 这是我的荣幸。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2021-07-25
    • 2017-11-04
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多