728x90
반응형
#ridge, lasso, elastic
install.packages("glmnet"); install.packages('dplyr');
library(glmnet)
library('dplyr')
glmnet 패키지는 Ridge, Lasso, ElasticNet Regression에 대한 함수를 제공하는 패키지입니다.
dplyr 패키지는 데이터 전처리에 자주 사용되는 패키지구요.
prostate<-read.csv("Prostate_Cancer_data.csv")
head(prostate)
lcavol lweight age lbph svi lcp gleason pgg45 lpsa
1 -0.5798185 2.769459 50 -1.386294 0 -1.386294 6 0 -0.4307829
2 -0.9942523 3.319626 58 -1.386294 0 -1.386294 6 0 -0.1625189
3 -0.5108256 2.691243 74 -1.386294 0 -1.386294 7 20 -0.1625189
4 -1.2039728 3.282789 58 -1.386294 0 -1.386294 6 0 -0.1625189
5 0.7514161 3.432373 62 -1.386294 0 -1.386294 6 0 0.3715636
6 -1.0498221 3.228826 50 -1.386294 0 -1.386294 6 0 0.7654678
Prostate_Cancer_data 데이터를 사용합니다.
Regression으로 8개의 x변수로 lpsa를 예측하는 문제입니다.
y <- prostate$lpsa
x <- prostate %>% select(lcavol, lweight, age, lbph, svi, lcp, gleason, pgg45) %>% data.matrix()
lambdas <- seq(0, 0.3, by = .05)
y 와 x를 정의하고, Ridge, Lasso, ElasticNet Regression의 hyperparameter인 lambda 값을 0~0.3까지 0.05 간격으로 지정해줄게요.
cv_fit <- cv.glmnet(x, y, alpha = 0, lambda = lambdas)
#alpha =0 ridge, =1, lasso, =0.5 elasticnet
#cv.glmnet() uses cross-validation to work out how well each model generalises, which we can visualise as:
cv.glmnet 함수는 Ridge, Lasso, ElasticNet Regression를 cross validation 방법을 사용해 적합합니다.
그리고, alpha 변수를 통해, 어떠한 방법을 사용할지 지정할 수 있습니다.
plot(cv_fit)
#그려지는 그림에서 가장 낮은 점이 최적의 람다이다
#CV에서 오차를 가장 최소화하는 로그 람다값
cv_fit 변수를 그래프로 그림으로써, 최적의 lambda값을 정할 수 있습니다.
빨간 점이 가장 낮은 지점이 Cross validation MSE 를 가장 작게하는 lambda입니다.
opt_lambda <- cv_fit$lambda.min
opt_lambda #테스트 set이 시행할때마다 바뀔수 있어 값이 바뀐다.
[1] 0.1
lambda = 0.1 이 최적의 값으로 선택됩니다.
Cross validation의 특징상 같은 코드를 사용하더라도, 결과는 약간 차이가 생길 수 있어요.
fin<-glmnet(x,y,alpha=0, lambda = opt_lambda)
coef(fin)
9 x 1 sparse Matrix of class "dgCMatrix"
s0
(Intercept) 0.454881479
lcavol 0.500694281
lweight 0.439764444
age -0.014561128
lbph 0.093398369
svi 0.680311397
lcp -0.029527289
gleason 0.063336914
pgg45 0.003345245
최적의 lambda값을 활용하여, 최종 모델의 coefficient를 출력할 수 있습니다.
반응형
'데이터 다루기 > Base of R' 카테고리의 다른 글
[R] Hierarchical clustering, K-means clustering (0) | 2020.03.16 |
---|---|
[R] Principal Component Analysis (PCA), Factor Analysis (0) | 2020.03.11 |
[R] Data Partition (데이터 분할) (0) | 2020.03.09 |
[R] 회귀 분석 (변수선택) (0) | 2020.03.08 |
[R] 회귀 분석 (0) | 2020.03.06 |