【问题标题】:Linear Regression Coefficients线性回归系数
【发布时间】:2021-08-20 15:42:00
【问题描述】:

我目前正在使用 statsmodels(尽管我也很乐意使用 Scikit)来创建线性回归。在这个特定的模型上,我发现当向模型添加多个因子时,OLS 算法会吐出狂野的系数。这些系数都非常高和低,这似乎通过平均来优化算法。它导致所有因素在统计上都不显着。我只是想知道是否有一种方法可以对系数设置上限或下限,以便 OLS 必须在这些新边界内进行优化?

【问题讨论】:

    标签: python machine-learning scikit-learn linear-regression statsmodels


    【解决方案1】:

    不知道能不能给OLS设置一个条件,使得系数的绝对值都小于一个常数。

    不过,正则化是解决这类问题的好方法。基本上,L1 或 L2 正则化会惩罚优化函数中系数的总和,这会将最不重要变量的系数推向接近零,因此它们不会提高成本函数的值。

    看看lassoridgeelastic net回归。它们分别使用 L1、L2 和两种形式的正则化。

    您可以在 statsmodels 中尝试以下操作:

    # Import OLS
    from statsmodels.regression.linear_model import OLS
    
    # Initialize model
    reg = OLS(endog=y, exog=X)
    
    # Fit model
    reg = reg.fit_regularized()
    

    【讨论】:

    • 我正在尝试使用 statsmodels.regression.linear_model.OLS.fit_regularized(method='elastic_net', alpha=0.0, L1_wt=0, start_params=None, profile_scale=False, refit=False),但我不确定我在哪里指定我的训练数据。对于 OLS,它看起来像这样:sm.OLS(Y_train, X_train)。你知道怎么做吗?
    • model = sm.OLS(Y_train, X_train) res=model.fit_regularized(method='elastic_net', alpha=0.0, L1_wt=0, start_params=None, profile_scale=False, refit=False) ,
    • 我在答案中添加了一些代码。这能回答你的问题吗?
    • 最后,.summary() 函数似乎不再起作用,因为拟合已经被规范化了。我仍然可以看到带有 .params 的参数,但我需要查看模型的 P 值和 r^2 值。有没有其他方法可以获取这些信息?
    • 感谢您的帮助。我认为这可能是更新的:sm.regression.linear_model.OLSResults
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2015-05-08
    • 2018-10-02
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2017-03-12
    相关资源
    最近更新 更多