我可以在Python中使用LASSO方法拟合VAR模型吗?

问题描述 投票:0回答:1

我必须在VectorAutoregressive模型中拟合40个时间序列,大量变量建议使用选择方法。我想使用LASSO方法,但是我使用statsmodel进行拟合,并且使用该库实现LASSO的唯一方法是使用线性回归模型。有人可以帮忙吗?

python statsmodels lasso-regression
1个回答
0
投票

[您可以尝试使用fit_regularized,就像您适合OLS一样,并且将L1_wt设置为1以便它是套索:]

sm.OLS(..,..).fit_regularized(alpha=..,L1_wt=1)

我们可以举一个例子,首先加载波士顿数据集:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn import linear_model
from sklearn.metrics import mean_squared_error
import numpy as np
import statsmodels.api as sm

scaler = StandardScaler()
data = load_boston()
data_scaled  = scaler.fit_transform(data.data)
X_train, X_test, y_train, y_test = train_test_split(data_scaled, data.target, test_size=0.33, random_state=42)

下面显示它的工作原理类似,并且您需要调整收缩参数,无论如何在模型中为alpha:

alphas = [0.0001,0.001, 0.01, 0.1,0.2, 0.5, 1]
mse_sklearn = []
mse_sm = []

for a in alphas:

    clf     = linear_model.Lasso(alpha=a)
    clf.fit(X_train, y_train)

    y_pred = clf.predict(X_test)
    mse_sklearn.append(mean_squared_error(y_test, y_pred))

    mdl = sm.OLS(y_train,sm.add_constant(X_train)).fit_regularized(alpha=a,L1_wt=1)
    y_pred = mdl.predict(sm.add_constant(X_test))
    mse_sm.append(mean_squared_error(y_test, y_pred))

可视化结果:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(alphas,mse_sm,label="sm")
ax.plot(alphas,mse_sklearn,label="sklearn")
ax.legend()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.