Когда вы стандартизируете или масштабируете, вы делаете (x - среднее (x)) / sd (x). Когда выполняется регрессия, центрирующая часть (- среднее (x)) переходит в точку пересечения, поэтому только стандартное отклонение влияет на ваш коэффициент.
К go от немасштабированных коэффициентов до масштабированных, вы можно умножить на стандартное отклонение.
Мы можем проверить это, сначала регрессия по масштабированным переменным x:
scaled_mt = mtcars
scaled_mt[,-1] = scale(scaled_mt[,-1])
fit_scaled = lm(mpg ~ .,data=scaled_mt)
Регрессия на оригинале:
fit = lm(mpg ~ .,data=mtcars)
gl mnet, где я установил очень низкую лямбду, чтобы включить все термины:
fit_lasso = cv.glmnet(y=as.matrix(mtcars[,1]),x=as.matrix(mtcars)[,-1],lambda=c(0.0001,0.00001))
Стандартное отклонение для всех переменных x:
AllSD = apply(mtcars[,-1],2,sd)
Чтобы показать, что преобразование в порядке:
cbind(scaled=coefficients(fit_scaled)[-1],
from_lm = coefficients(fit)[-1]*allSD,
from_glmnet = coefficients(fit_lasso)[-1]*allSD)
scaled from_lm from_glmnet
cyl -0.1990240 -0.1990240 -0.1762826
disp 1.6527522 1.6527522 1.6167872
hp -1.4728757 -1.4728757 -1.4677513
drat 0.4208515 0.4208515 0.4268243
wt -3.6352668 -3.6352668 -3.6071975
qsec 1.4671532 1.4671532 1.4601126
vs 0.1601576 0.1601576 0.1615794
am 1.2575703 1.2575703 1.2563485
gear 0.4835664 0.4835664 0.4922507
carb -0.3221020 -0.3221020 -0.3412025
Но обратите внимание, это не обязательно делает их сопоставимыми, поскольку они масштабируются по стандартному отклонению. Более важной целью масштабирования является их центрирование, чтобы вы могли легче интерпретировать положительные или отрицательные отношения.