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
この場合、を設定すると予測力が低下しnormalize=True
ます。これが単にscore
正規化を適用していない関数のアーティファクトなのか、正規化された値によってmodel
パフォーマンスが低下したのかはわかりません。
正規化は、実際に適合データと予測データの両方に適用されます。このように異なる結果が表示される理由は、Boston HousePriceデータセットの列の範囲が大きく異なるためです。
>>> 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])
これは、ElasticNetの正則化項が、正規化されたデータと正規化されていないデータに対して非常に異なる影響を与えることを意味します。これが、結果が異なる理由です。これは、正則化の強さ(alpha
)を非常に小さい数に設定することで確認できます1E-8
。この場合、正則化はほとんど効果がなく、正規化は予測結果に影響を与えなくなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加