Как я могу перевести этот код регрессии лассо Python в Matlab? - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы использовать некоторый код Python регрессионного лассо от третьей стороны в существующем приложении на основе Matlab, хотя у меня возникают проблемы с поиском наиболее эквивалентных функций Matlab для использования. У меня также нет достаточно сильного фона в регрессионных моделях, чтобы знать, как проверять четность.

Цель состоит в том, чтобы подогнать сигнал 'z_ref' (фрейм данных 1D панд) к сигналу '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;

ОсновнойВ чем я не уверен, так это в действительности то, что делает реализация Python Lasso и .fit () из пакета sklearn. Из этого кода Python объект 'lin', по-видимому, получает одно значение перехвата и коэффицирования, например:

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: {}

Так что в простом смысле я не уверен, какие значения coef и intercept мне следует использовать из реализации matlab. В моем приведенном выше коде я использовал первый в каждом массиве, что дает довольно похожий результат с кодом Python (вывод z_ref_fitted выглядит аналогично, но меньше).

Буду очень признателен за любые рекомендации по лучшей реализации кода Python в Matlab или теоретические вопросы, на которые я должен обратить внимание.

1 Ответ

0 голосов
/ 06 ноября 2019

Альфа, которую вы устанавливаете для Lasso () в коде Python, предназначена для параметров регуляризации. Альфа, которую вы устанавливаете для lasso () в коде Matlab, относится к весу лассо и оптимизации гребня. Поскольку вы не установили параметры регуляризации в matlab lasso (), поэтому по умолчанию lasso выполняет лассо-регуляризацию, используя геометрическую последовательность значений лямбды, в результате получается вектор из 100 столбцов, каждый столбец которого является результатом, соответствующим каждому значению лямбды

Вы должны изменить свой код Matlab следующим образом [B, fitInfo] = lasso (z_ref, z_signal, 'Lambda', 0,0001, 'MaxIter', 1000);

Надеюсь, эта помощь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...