鉴于我有以下 patsy 公式,
'y ~ a + b + c'
并将其传递给 statsmodels.ols,如何向回归系数添加正则化项?
在这种情况下,我希望创建自己的惩罚函数,而不是简单地使用 ridge、lasso 或 elasticnet 回归。
这是一个可重现的示例,其中包含与我的问题类似的数据:
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
a = np.clip(np.random.normal(loc=60, scale=40, size=(100)), 0, 100)
b = np.clip(np.random.normal(loc=40, scale=40, size=(100)), 0, 100)
c = np.clip(np.random.normal(loc=20, scale=20, size=(100)), 0, 100)
y = (
32 * (a + 8 * np.random.random(a.shape))
+ 21 * (b + 5 * np.random.random(b.shape))
+ 36 * (c + 5 * np.random.random(c.shape))
) + (50 * np.random.random(a.shape))
data = pd.DataFrame(
data=np.array([a, b, c, y]).T,
columns=['a', 'b', 'c', 'y']
)
formula = 'y ~ a + b + c'
mod = smf.ols(formula=formula, data=data,)