【问题标题】:Sklearn StandardScaler + ElasticNet with interpretable coefficients具有可解释系数的 Sklearn StandardScaler + ElasticNet
【发布时间】:2020-04-06 20:22:12
【问题描述】:
为了正确拟合像弹性网络这样的正则化线性回归模型,必须首先对自变量进行标准化。但是,这些系数具有不同的含义。为了提取此类模型的正确权重,我是否需要使用以下公式手动计算它们:
b = b' * std_y/std_x
还是 sklearn 中已经有一些内置功能?
另外:我认为我不能只使用normalize=True 参数,因为我有可能应该保持未缩放的虚拟变量
【问题讨论】:
标签:
python
scikit-learn
linear-regression
regularized
【解决方案1】:
您可以使用均值和标准差进行非标准化。 sklearn 在您使用 StandardScaler 后提供它们。
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit_transform(X_train) # or whatever you called it
unstandardized_coefficients = model.coef_ * np.sqrt(ss.var_) + ss.mean_
这将使它们处于非标准化数据的规模。
然而,由于您使用的是正则化,它变成了一个有偏估计器。当涉及到有偏/无偏估计量时,性能和可解释性之间存在权衡。这更多是针对stats.stackexchange.com 的讨论。无偏估计器和低 MSE 估计器之间存在差异。在此处阅读有偏见的估计器和可解释性:When is a biased estimator preferable to unbiased one?。
tl;dr按照你的建议去做是没有意义的。