수식이 나오지 않는다면 새로고침(F5)을 해주세요
모바일은 수식이 나오지 않습니다.
📌 Elastic Nets(엘라스틱 넷)
먼저 엘라스틱 넷에 대해 이해하기 위해 아래 내용을 참조해주시길 바랍니다. 이어지는 내용입니다.
엘라스틱 넷
은 Ridge regression(릿지 회귀, $L_2$)와 LASSO(라쏘 회귀, $L_1$)을 cobination 한 것입니다.
◼️ Elastic nets 접근
엘라스틱넷의 solution은 아래와 같습니다.
$$
\frac1{2n} \sum_{i=1^n}(y_i-\beta_0-\sum_{j=1}^p \beta_j x_{ij})^2 + \lambda((1-\alpha)\frac12 \sum_{j=1}^p \beta_j^2 + \alpha \sum_{j=1}^p |\beta_j|)
$$
릿지의 제곱항과 라쏘의 절댓값항 모두를 포함합니다.
$\lambda$뿐 아니라 $\alpha$라는 파라미터를 사용합니다.
$\alpha$값으로 릿지와 라쏘 사이의 정도를 조정해줍니다.
- 만약 $\alpha =0$ 이면,
ridge solution
과 같아집니다. - 만약 $\alpha =1$ 이면,
LASSO
와 같아집니다.
◼️ With R
Auto 데이터를 이용한 mpg 예측
library(ISLR)
x = model.matrix(mpg~.,Auto)[,-1]
y = Auto$mpg
# name 열 제거
Auto = Auto[,!(names(Auto) %in% c('name'))]
Train, Test set 나누기 8:2
train = sample(1:nrow(x), 0.8*nrow(x))
dftrain = Auto[train,]
dftest = Auto[-train,]
Train data를 5-fold로
library(caret)
library(glmnet)
myfolds = createFolds(dftrain$mpg, k=5, returnTrain=T)
# Train set를 5-fold로
mycontrol = trainControl(method='cv', number=5,
index=myfolds,
savePredictions = 'final')
model fitting 하기
# 알파와 람다값은 default값으로 지정.
fit = train(mpg~., data=dftrain, method='glmnet',
trControl=mycontrol,
tuneLength=3, preProcess=c('center', 'scale'))
fit
fit한 결과를 보시면 5-fold의 알파 값, 람다 값 각각 세가지 조합일떄 RMSE값이 나옵니다. 우리는 이 RMSE값이 최저인 것을 봐야겠죠.
best parameter 확인
# best lambda, alpha 값
best = fit$bestTune
best
>> alpha lambda
8 1 0.1256238
이는 8번째 조합인 알파 : 1, 람다 : 0.1256238 일때 최저의 RMSE를 갖는다는 의미 입니다.
Test set의 RMSE 확인하기
pred = predict.train(fit, dftest)
mean((dftest$mpg-pred)^2)
>> 10.18244
최종 test set에 적용하였을 때는 10.18244 RMSE가 나오네요.
'🌞 Statistics for AI > Regularization' 카테고리의 다른 글
정규화 접근 : 릿지(Ridge)와 라쏘(Lasso) (0) | 2024.02.16 |
---|