为了正确拟合像弹性网络这样的正则化线性回归模型,必须首先对自变量进行标准化。然而,系数具有不同的含义。为了提取此类模型的适当权重,我是否需要使用以下方程手动计算它们:
b = b' * std_y/std_x
或者 sklearn 中已经有一些内置功能吗?
另外:我认为我不能只使用 normalize=True
参数,因为我有虚拟变量,它们可能应该保持未缩放
最佳答案
您可以使用均值和标准差进行非标准化。 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按照你的建议去做是没有意义的。
关于python - Sklearn StandardScaler + ElasticNet 具有可解释系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321593/