Меня смущает то, что именно normalized=
делает в RidgeCV из sklearn.linear_model.
В документации говорится:
normalize : bool, default=False Этот параметр игнорируется, если для
fit_intercept
установлено значение False. Если True, регрессоры X будут нормализованы перед регрессией путем вычитания среднего значения и деления на l2-норму. Если вы хотите стандартизировать, используйте :class:sklearn.preprocessing.StandardScaler
перед вызовомfit
в оценщике сnormalize=False
.
- Обычно мы называем стандартизацию вычитанием среднего и делением на l2-норму. Но в документации это называется «нормализовать».
- Если я правильно понимаю документацию, я должен использовать третий блок кода (последний блок), следуя
If you wish to standardize, please use :class:`sklearn.preprocessing.StandardScaler` before calling ``fit`` on an estimator with ``normalize=False``.
- Но тогда как мне интерпретировать коэффициенты? Это нормированные коэффициенты? Но, глядя на их величину, я сомневаюсь, что это стандартизированные коэффициенты.
В целом, я не уверен, что следовал документации по этому параметру normalize
.
Я буду тестировать аналогичный код на других языках и посмотрю, что получится.
from sklearn.datasets import load_diabetes
from sklearn.linear_model import RidgeCV
X, y = load_diabetes(return_X_y=True)
без стандартизации
clf = RidgeCV(normalize=False,alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X, y)
clf.coef_
print(clf.alpha_)
print(clf.score(X,y))
print(clf.coef_)
0.01
0.5166287840315846
[ -7.19945679 -234.55293001 520.58313622 320.52335582 -380.60706569 150.48375154 -78.59123221 130.31305868 592.34958662 71.1337681 ]
стандартизировать и нормализовать = True
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X)
X_std = scaler.transform(X)
clf = RidgeCV(normalize=True,alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X_std, y)
print("standardize and normalize=True")
print(clf.alpha_)
print(clf.score(X_std,y))
print(clf.coef_)
standardize and normalize=True
0.01
0.5166287840315843
[ -0.34244324 -11.15654516 24.76161466 15.24574131 -18.10363195
7.15778213 -3.7382037 6.19836011 28.17519659 3.38348831]
стандартизировать и нормализовать = False
clf = RidgeCV(normalize=False,alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X_std, y)
print("standardize and normalize=False")
print(clf.alpha_)
print(clf.score(X_std,y))
print(clf.coef_)
standardize and normalize=False
1.0
0.5175831607267165
[ -0.43127609 -11.33381407 24.77096198 15.37375716 -30.08858903
16.65328714 1.46208255 7.5211415 32.84392268 3.26632702]
normalize=True
- person G. Anderson   schedule 14.02.2020