통계데이터분석- 회귀분석 - 페널티회귀분석(ridge, lasso, elasticnet) 🔑 penalized regression analysis | L2-norm L1-norm

  Рет қаралды 5,182

곽기영

곽기영

Күн бұрын

[R을 이용한 통계데이터분석]
페널티회귀분석(penalized regression analysis)은 너무 많은 독립변수를 갖는 모델, 즉 복잡한 모델에 페널티를 부과하는 방식으로 보다 간명한 회귀모델을 생성합니다. 이렇게 함으로써 모델의 성능에 크게 기여하지 못하는 변수의 영향력을 축소하거나 아예 모델에서 제거하여 모델 내에 지나치게 많은 독립변수가 포함되는 것을 방지합니다. 표준적인 선형회귀모델이 최소자승법에 의해 잔차(관측값-예측값)의 제곱합을 최소화하는 회귀계수를 추정하는 반면, 페널티회귀모델은 여기에 페널티항을 추가하여 잔차의 제곱합과 페널티항의 합이 최소가 되는 회귀계수를 추정합니다. 여기에서는 릿지회귀분석(ridge regression analysis), 라소회귀분석(lasso regression analysis, least absolute shrinkage and selection operator regression analysis), 일래스틱넷회귀분석(elasticnet regression analysis) 등 가장 널리 사용되는 세 가지 페널티회귀분석 기법을 살펴봅니다. 다음과 같은 함수에 대한 설명이 포함되어 있습니다: createDataPartition(), model.matrix(), cv.glmnet(), plot(), glmnet(), coef(), predict(), postResample(), train(), resamples(), summary(), diff().
📢 R과 RStudio 설치는 'R 프로그래밍 / R 기초 - 설치' 강좌를 참고하세요( • R 프로그래밍 / R 기초 - 설치 🔑 ... ).
📚 『곽기영』 채널의 동영상 강의는 다음 도서를 바탕으로 하고 있습니다. 책의 목차를 포함한 책자에 대한 소개는 도서명 옆의 링크를 참고해주세요. 💕
『R 기초와 활용』 (product.kyobob...)
『R을 이용한 통계데이터분석』 (product.kyobob...)
『R을 이용한 머신러닝과 텍스트마이닝』 (product.kyobob...)
『R을 이용한 웹스크레이핑과 데이터분석』 (product.kyobob...)
『SPSS를 이용한 통계데이터분석』 (product.kyobob...)
『소셜네트워크분석』 (product.kyobob...)
#R프로그래밍 #데이터분석 #통계 #머신러닝 #데이터애널리틱스 #데이터사이언스

Пікірлер: 27
@timmm505
@timmm505 2 жыл бұрын
감사합니다 교수님. 감사합니다
@kykwahk
@kykwahk 3 жыл бұрын
caret 패키지의 train() 함수는 교차검증(cross-validation)을 보다 효과적으로 수행할 수 있도록 도와줍니다. 그 자체로 모델을 생성해주는 함수는 아니고 다른 모델을 가져와서 교차검증을 수행해줍니다. 다양한 인수 조합에 따른 성능을 쉽게 비교할 수 있어 인수튜닝(parameter tuning)에 많이 사용됩니다. 여기서 적용한 glmnet모델뿐만 아니라 매우 다양한 모델에 적용할 수 있습니다. train() 함수의 method 인수에 사용할 모델을 지정합니다. 사용 가능한 모델은 다음과 같이 확인해볼 수 있습니다. > names(getModelInfo()) [1] "ada" "AdaBag" "AdaBoost.M1" [4] "adaboost" "amdai" "ANFIS" ...(중략) [235] "wsrf" "xgbDART" "xgbLinear" [238] "xgbTree" "xyf" 적용 가능한 모델에 대한 보다 자세한 설명은 다음 웹사이트를 참고하시면 좋을 것 같습니다. topepo.github.io/caret/train-models-by-tag.html 😓 구독자분께서 앞의 내용에 대한 질문을 남겼었는데요, 제가 댓글을 달면서 실수로 질문을 삭제했습니다. 그래서 여기에 답글만 남겨요.💦
@user-bm9vk2gc8i
@user-bm9vk2gc8i 3 жыл бұрын
아 저의 화면에는 삭제가 안 되었는데요^^ 설명주신 train() 함수를 조사해보니 앙상블이나 머신러닝에서 grid와 control 등의 모델 튜닝을 위한 인자 설정이 굉장히 복잡해 보이네요. 적용하는 각 모델마다 어떻게 설정해야 할지 막막하긴 한데요. 한글로 제대로 잘 설명해주는 것이 안보이네요. 열심히 더 찾아보곘습니다.^^ 감사합니다.~
@damien4494
@damien4494 2 жыл бұрын
차근차근 쉽게 설명해주셔서 이해가 바로 됐습니다! 감사합니다!
@SpaderAILab
@SpaderAILab 3 жыл бұрын
쉽게 잘 설명해주셔서 감사합니다. 도움 많이 받았습니다.
@user-ll1gc8pw6x
@user-ll1gc8pw6x 3 жыл бұрын
항상 잘 보고 있습니다. 감사합니다.
@user-nk7qf2jy1e
@user-nk7qf2jy1e 10 ай бұрын
릿지 독립변수 척도에 영향을 받기 때문에 모든 동일한 척도를 갖도록 표준화해야 함, 릿지는 모든 독립변수를 포함한다 라쏘는 회귀계수를 0으로 만들어주어 변수선택을 통해 축소
@rudah96
@rudah96 3 жыл бұрын
와...한줄 한줄 rstudio로 따라하면서 이해했습니다. 친절한 설명 너무 감사드립니다!! 혹시 이런 소스코드까지 공유해 주시면 더 편하게 따라할거 같습니다! 좋은 내용의 강의영상 너무 감사합니다!
@kykwahk
@kykwahk 3 жыл бұрын
동영상 강의에서 사용하는 예제의 R 프로그램 코드는 GitHub 사이트로부터 다운로드할 수 있습니다. URL은 '통계데이터분석' 재생목록의 소개글에서 보실 수 있어요. (그런데요... 지금 하셨던 것처럼 한 줄 한 줄 RStudio에 입력하면서 공부하면 기억에 더 오래 남을 거예요^^)
@rudah96
@rudah96 3 жыл бұрын
@@kykwahk 답변 감사합니다! 교수님 말씀대로 직접 한 줄 한 줄 따라하면서 공부하겠습니다! 감사합니다 :)
@user-zy9oe9zh4v
@user-zy9oe9zh4v Жыл бұрын
안녕하세요. 강의 잘 듣고 늘 감사합니다. 페털티회귀분석의 경우 1. 독립변수의 VIF 확인하는 방법 2. 잔차분석(선형선, 등분산성, 정규성, 독립성 등) 하는 방법 이 궁금합니다.
@kykwahk
@kykwahk Жыл бұрын
1. VIF는 데이터셋의 예측변수들로부터 계산되는 것이지 특정 예측모델을 바탕으로 산출되는 것이 아닙니다. 따라서 모든 예측변수가 포함되는 릿지회귀분석의 경우라면 일반적인 OLS회귀모델 객체를 car::vif() 함수에 전달하여 VIF를 계산할 수 있습니다. 2. 잔차(residual)를 계산하여 잔차와 예측값 간의 관계를 그래프로 시각화할 수 있습니다. 예를 들면, plot(res ~ pred)을 실행하여 그릴 수 있습니다. 일반적인 OLS회귀분석에서처럼 0을 중심으로 무작위로 분포하는지 살펴봅니다. 그런데요, 실제로 그래프를 그려보면 대체로 작은 예측값에서는 잔차가 작아지고 큰 예측값에서는 잔차기 커지는 경향이 보이기도 합니다. 이는 '제약'(regularization)으로 인해 예측값들을 좀 더 평균에 가깝도록 만들어주기 때문입니다(즉 회귀계수의 크기가 작아져서 좀 더 평평한 회귀선이 만들어진다는 뜻입니다). 따라서 아무런 제약 없이 편향되지 않은 신뢰할 수 있는 회귀계수를 추정(즉 unbiased estimates)하는 OLS회귀분석에서와 달리 페널티회귀분석은 페널티항으로 인한 제약으로 회귀계수의 크기가 강제로 축소되기 때문에 이러한 잔차분석에 큰 의미를 부여하기 어려울 수 있고, 따라서 해석상의 주의가 필요합니다.
@user-zo5cz6ee5c
@user-zo5cz6ee5c 6 ай бұрын
안녕하세요, 교수님. 강의 항상 잘 듣고 있습니다. 강의 내용 중 질문이 있습니다! 이 페널티회귀분석에서만 머신러닝과 같이 훈련 데이터와 테스트 데이터를 나누는 이유는 뭔가요?
@kykwahk
@kykwahk 6 ай бұрын
페널티회귀분석은 주로 예측목적에 사용되기 때문에 일반적인 머신러닝에서처럼 모델의 생성을 위한 훈련 데이터와 모델의 성능을 평가하기 위한 테스트 데이터로 데이터셋을 분할했습니다. 이 강좌에서 다루고 있는 통계기법은 예측목적으로 사용할 수도 있지만(예를 들면, 회귀분석 종류) 대부분 수집한 데이터를 바탕으로 가설검정을 위해 활용하기 때문에 데이터셋을 분할할 필요가 없었고요.
@user-zo5cz6ee5c
@user-zo5cz6ee5c 6 ай бұрын
@@kykwahk 그렇군요, 답변 감사합니다! 특별히 페널티회귀분석이 예측에 주로 사용되는 이유도 궁금합니다!
@deargmai
@deargmai 2 жыл бұрын
교수님 친철하신 설명에 항상 감사드리고 있습니다. 질문이 있는데요, 릿지나 라쏘회귀의 성능을 평가하실 때 모델에 숫자행렬 관측값을 제공해서성능을 산출하셨는데, 세 모델 성능차이 비교할 때는 모델 만으로 성능지표를 바로 산출하셨습니다. 이 때 resamples()함수에 숫자행렬을 입력하여 나온 값으로 비교하지 않았는데 그래도 괜찮은 건가요?
@kykwahk
@kykwahk 2 жыл бұрын
세 모델의 성능 차이를 비교할 때는 테스트 데이터를 이용하지 않고 caret 패키지를 이용하여 교차검증한 결과를 사용해서 그렇습니다. 각 모델별로 교차검증 성능 지표를 표본추출하는 방식으로 성능을 비교했습니다. 반면에 앞서 각 개별 모델의 성능을 평가할 때는 테스트 데이터를 이용한 것이고요.
@user-yy2yd5ie8q
@user-yy2yd5ie8q 2 жыл бұрын
강의 감사합니다! 질문이 있는데, cv.glmnet() 함수와 train() 함수 간에 차이점이 있는지 궁금합니다. cv.glmnet() 함수는 교차검증만 수행하고, train() 함수는 교차검증과 함께 최적의 파라미터를 찾는 기능을 하는 건가요?
@kykwahk
@kykwahk 2 жыл бұрын
두 함수 모두 교차검증을 통해 최적의 패러미터를 탐색합니다. 하지만 caret 패키지의 train() 함수는 여기서 적용한 glmnet모델뿐만 아니라 매우 다양한 모델에 적용할 수 있습니다. 이 동영상 강의 아래에 관련 댓글들이 있으니 참고하시고요, 보다 구체적인 내용은 두 함수의 도움말을 살펴보세요.
@user-yy2yd5ie8q
@user-yy2yd5ie8q 2 жыл бұрын
@@kykwahk 답변 감사합니다!
@user-fr4vv7vt8q
@user-fr4vv7vt8q 3 жыл бұрын
교수님 최적의 파라메터를 찾기 위해서 위 방법말고도 다른 방법들을 많이 사용하나요..?
@kykwahk
@kykwahk 3 жыл бұрын
최적의 패러미터를 찾기 위한 튜닝 작업(grid search)은 일반적으로 강의에서 소개한 caret 패키지를 많이 사용합니다. 하지만 이 방법이 마음에 안 든다면 가능한 많은 경우의 수를 탐색하기 위한 방법을 분석자 스스로 설계할 수도 있습니다.
@user-fr4vv7vt8q
@user-fr4vv7vt8q 3 жыл бұрын
@@kykwahk 답변 감사드립니다!
@dykang9932
@dykang9932 Жыл бұрын
안녕하세요 영상 잘 보았습니다. 다름이 아니라 postresample을 통해 r squared를 보았는데 제가 알기론 adj r squared을 봐야하는 걸로 알고 있습니다 이 부분에 대한 함수라던지 코딩은 따로 정리가 되지 않았나요!? 따로 보는 방법은 없나요?
@kykwahk
@kykwahk Жыл бұрын
네~ 말씀하신 대로 일반적으로 독립변수의 개수를 고려하여 과적합(overfitting)을 보정한다는 측면에서 Adjusted R-squared를 보는 것이 바람직할 수 있습니다만 반드시 그래야 하는 것은 아닙니다. 분석 목적과 용도에 따라 각각 장단점이 있을 수 있습니다. 예를 들어, R-squared는 모델에 의해 설명되는 종속변수 분산의 비율이라는 모델 설명력에 대한 직접적인 해석이 가능한 반면, Adjusted R-squared는 보정이 되기 때문에 그러한 직접적 해석은 부적절합니다. 즉 모델의 전체적인 설명력은 R-squared를 보는 것이 좋습니다. 반면에 독립변수의 개수가 다른 여러 대안모델 가운데 Adjusted R-squared가 가장 큰 모델을 선택하는 식으로 Adjusted R-squared는 모델을 비교하는 용도로 사용할 수 있습니다. 또한 R-squared는 [0, 1]의 범위를 갖는 반면, Adjusted R-squared는 하한값이 없다는 단점이 있습니다(즉 [-Inf, 1], 관측값 개수가 적고 독립변수 개수가 많을 때 음수가 발생할 수 있으며 이 경우 0으로 리포팅합니다). Adjusted R-squared의 산출 방법에 대해 설명 드리기 전에 먼저 여기 강의에서 제시한 R-squared에 대해서 추가로 알아야 할 부분이 있습니다. R-squared를 계산하는 방법에는 사실 여러 가지가 있는데요, 여기서 사용된 caret 패키지의 postResample() 함수는 단순히 관측값과 예측값 간의 상관계수를 제곱하여 산출합니다(cor() 함수를 이용하여 관측값과 예측값 간 상관계수를 계산한 후 제곱하면 동일한 값을 얻을 수 있습니다). caret 패키지 도움말 문서를 보면 이를 "simple R-squared"라고 표현하고 있습니다. 그래서 우리가 일반적으로 알고 있는 R-squared와는 다릅니다. 다시 말해 'R^2=1-SSR/SST'로 계산하는 선형회귀분석의 R-squared와 다릅니다. 이 R-squared는 glmnet 객체의 dev.ratio에 포함되어 있습니다. dev.ratio 값은 분포에 따라 다른 의미를 갖습니다만 지금 여기 예처럼 선형회귀분석의 경우(즉 family="gaussian")에는 이 값이 R-squared가 됩니다(family="binomial"인 로지스틱회귀분석의 경우에는 deviance를 바탕으로 산출됩니다). > Boston.gnet$dev.ratio [1] 0.7631217 Adjusted R-squared는 R-squared를 표본크기와 예측변수(독립변수) 개수로 보정하여 다음 같이 계산할 수 있습니다. adj_R^2=1-[(1-R^2 )*(n-1)/(n-p-1)], 여기에서 n은 표본크기, p는 예측변수 개수 > r2 r2 [1] 0.7631217 > n p 1-(1-r2)*((n-1)/(n-p-1)) [1] 0.7541176
@dykang9932
@dykang9932 Жыл бұрын
@@kykwahk 설명 너무 감사합니다. 제가 이해한 것으로는 일반 R squared는 모델의 설명력을 볼 수 있고, adjusted r squared은 각 다른 모델중 어떤 모델의 성능이 좋은지 비교할 때 사용한다는 말씀이신 거죠? 또 한 가지 질문 들일게 있습니다. 릿지같은 경우 모든 변수들을 사용하기 때문에 p값이 전체 변수인 반면에 랏쏘같은 경우 중요한 변수만 추려서 쓰기에 p값이 릿지에 비해 줄어들 수 있다
@kykwahk
@kykwahk Жыл бұрын
1. 네 일반적으로 그렇게 이해하시면 됩니다. 다만 Adjusted R-squared를 이용하여 "성능"이 좋은 모델을 선택한다기보다는 "간명도 관점에서 더 나은" 모델을 알려준다고 보시는 것이 좋을 듯합니다. "성능"이란 여러 가지 의미로 해석될 수 있으니까요. 2. 페널티회귀분석(penalized regression analysis)은 p-값을 리포팅하지 않습니다. 왜냐하면 일반적으로 의미가 없다고 알려져 있기 때문입니다. 이에 대해서는 여러 가지 이슈/주장이 있습니다(예를 들면, 선택되는 변수가 매번 다를 수 있기 때문에 p-값이나 신뢰구간을 계산하기 위한 적절한 표집분포를 만들 수 없습니다). 아무튼 분석자 입장에서는 릿지는 모든 변수를 사용하고, 라소는 모델에 도움이 되는 일부 유용한 변수만 추려준다고 이해하시면 좋을 것 같습니다. 3. 선형회귀분석에 L1-norm/L2-norm을 통해 페널티를 줌으로써 제약화(regularization)했던 것처럼 로지스틱회귀분석에도 동일한 방식을 적용할 수 있습니다. 이런 제약화를 통해 로지스틱회귀분석을 이용하여 분류분석을 할 때 변수의 개수를 효과적으로 줄일 수 있습니다. 다음 강의를 참고하세요. 통계데이터분석 - 일반선형모델 - 페널티 로지스틱회귀분석(ridge, lasso, elasticnet) (kzbin.info/www/bejne/gqmrfpmoZpdjnbc)
Пришёл к другу на ночёвку 😂
01:00
Cadrol&Fatich
Рет қаралды 8 МЛН
So Cute 🥰
00:17
dednahype
Рет қаралды 47 МЛН
У ГОРДЕЯ ПОЖАР в ОФИСЕ!
01:01
Дима Гордей
Рет қаралды 7 МЛН
[핵심 머신러닝] 정규화모델 2 - LASSO, Elastic Net
32:16
‍김성범[ 교수 / 산업경영공학부 ]
Рет қаралды 18 М.
Ridge vs Lasso Regression, Visualized!!!
9:06
StatQuest with Josh Starmer
Рет қаралды 249 М.
Statistical Learning: 6.7 The Lasso
15:22
Stanford Online
Рет қаралды 7 М.
Пришёл к другу на ночёвку 😂
01:00
Cadrol&Fatich
Рет қаралды 8 МЛН