【问题标题】:Can I fit a VAR model using the LASSO method in Python?我可以在 Python 中使用 LASSO 方法拟合 VAR 模型吗?
【发布时间】:2020-08-30 01:17:42
【问题描述】:

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

【问题讨论】:

    标签: python statsmodels lasso-regression


    【解决方案1】:

    您可以尝试使用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()
    

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 2010-10-11
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2017-01-28
      相关资源
      最近更新 更多