sci-kit中的规范化学习linear_models

mgo*_*ser 6 python normalization linear-regression scikit-learn

如果True在任何线性模型中将标准化参数设置为sklearn.linear_model,则在评分步骤期间应用标准化吗?

例如:

from sklearn import linear_model
from sklearn.datasets import load_boston

a = load_boston()

l = linear_model.ElasticNet(normalize=False)
l.fit(a["data"][:400], a["target"][:400])
print l.score(a["data"][400:], a["target"][400:])
# 0.24192774524694727

l = linear_model.ElasticNet(normalize=True)
l.fit(a["data"][:400], a["target"][:400])
print l.score(a["data"][400:], a["target"][400:])
# -2.6177006348389167
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们在设置时看到预测功率的下降normalize=True,并且我无法判断这是否仅仅是score未应用归一化的函数的伪像,或者归一化值是否导致model性能下降.

jak*_*vdp 5

标准化确实适用于拟合数据和预测数据.您看到如此不同结果的原因是Boston House Price数据集中的列范围差异很大:

>>> from sklearn.datasets import load_boston
>>> boston = load_boston()
>>> boston.data.std(0)
array([  8.58828355e+00,   2.32993957e+01,   6.85357058e+00,
         2.53742935e-01,   1.15763115e-01,   7.01922514e-01,
         2.81210326e+01,   2.10362836e+00,   8.69865112e+00,
         1.68370495e+02,   2.16280519e+00,   9.12046075e+01,
         7.13400164e+00])
Run Code Online (Sandbox Code Playgroud)

这意味着ElasticNet中的正则化项对归一化与非归一化数据的影响非常不同,这就是结果不同的原因.您可以通过将正则化强度(alpha)设置为非常小的数字来确认这一点,例如1E-8.在这种情况下,正则化的影响非常小,归一化不再影响预测结果.