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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ม.ค. 2025

ความคิดเห็น • 27

  • @timmm505
    @timmm505 3 ปีที่แล้ว

    감사합니다 교수님. 감사합니다

  • @damien4494
    @damien4494 3 ปีที่แล้ว

    차근차근 쉽게 설명해주셔서 이해가 바로 됐습니다! 감사합니다!

  • @상도-y3k
    @상도-y3k 4 ปีที่แล้ว

    항상 잘 보고 있습니다. 감사합니다.

  • @SpaderAILab
    @SpaderAILab 3 ปีที่แล้ว

    쉽게 잘 설명해주셔서 감사합니다. 도움 많이 받았습니다.

  • @연구소신통방통
    @연구소신통방통 ปีที่แล้ว

    안녕하세요.
    강의 잘 듣고 늘 감사합니다.
    페털티회귀분석의 경우
    1. 독립변수의 VIF 확인하는 방법
    2. 잔차분석(선형선, 등분산성, 정규성, 독립성 등) 하는 방법
    이 궁금합니다.

    • @kykwahk
      @kykwahk  ปีที่แล้ว

      1. VIF는 데이터셋의 예측변수들로부터 계산되는 것이지 특정 예측모델을 바탕으로 산출되는 것이 아닙니다. 따라서 모든 예측변수가 포함되는 릿지회귀분석의 경우라면 일반적인 OLS회귀모델 객체를 car::vif() 함수에 전달하여 VIF를 계산할 수 있습니다.
      2. 잔차(residual)를 계산하여 잔차와 예측값 간의 관계를 그래프로 시각화할 수 있습니다. 예를 들면, plot(res ~ pred)을 실행하여 그릴 수 있습니다. 일반적인 OLS회귀분석에서처럼 0을 중심으로 무작위로 분포하는지 살펴봅니다. 그런데요, 실제로 그래프를 그려보면 대체로 작은 예측값에서는 잔차가 작아지고 큰 예측값에서는 잔차기 커지는 경향이 보이기도 합니다. 이는 '제약'(regularization)으로 인해 예측값들을 좀 더 평균에 가깝도록 만들어주기 때문입니다(즉 회귀계수의 크기가 작아져서 좀 더 평평한 회귀선이 만들어진다는 뜻입니다). 따라서 아무런 제약 없이 편향되지 않은 신뢰할 수 있는 회귀계수를 추정(즉 unbiased estimates)하는 OLS회귀분석에서와 달리 페널티회귀분석은 페널티항으로 인한 제약으로 회귀계수의 크기가 강제로 축소되기 때문에 이러한 잔차분석에 큰 의미를 부여하기 어려울 수 있고, 따라서 해석상의 주의가 필요합니다.

  • @rudah96
    @rudah96 4 ปีที่แล้ว

    와...한줄 한줄 rstudio로 따라하면서 이해했습니다. 친절한 설명 너무 감사드립니다!!
    혹시 이런 소스코드까지 공유해 주시면 더 편하게 따라할거 같습니다!
    좋은 내용의 강의영상 너무 감사합니다!

    • @kykwahk
      @kykwahk  4 ปีที่แล้ว +1

      동영상 강의에서 사용하는 예제의 R 프로그램 코드는 GitHub 사이트로부터 다운로드할 수 있습니다. URL은 '통계데이터분석' 재생목록의 소개글에서 보실 수 있어요. (그런데요... 지금 하셨던 것처럼 한 줄 한 줄 RStudio에 입력하면서 공부하면 기억에 더 오래 남을 거예요^^)

    • @rudah96
      @rudah96 4 ปีที่แล้ว

      @@kykwahk 답변 감사합니다! 교수님 말씀대로 직접 한 줄 한 줄 따라하면서 공부하겠습니다! 감사합니다 :)

  • @박수진-q1x2t
    @박수진-q1x2t ปีที่แล้ว

    릿지 독립변수 척도에 영향을 받기 때문에 모든 동일한 척도를 갖도록 표준화해야 함, 릿지는 모든 독립변수를 포함한다
    라쏘는 회귀계수를 0으로 만들어주어 변수선택을 통해 축소

  • @백경민-j1l
    @백경민-j1l 3 ปีที่แล้ว

    교수님 최적의 파라메터를 찾기 위해서 위 방법말고도 다른 방법들을 많이 사용하나요..?

    • @kykwahk
      @kykwahk  3 ปีที่แล้ว +1

      최적의 패러미터를 찾기 위한 튜닝 작업(grid search)은 일반적으로 강의에서 소개한 caret 패키지를 많이 사용합니다. 하지만 이 방법이 마음에 안 든다면 가능한 많은 경우의 수를 탐색하기 위한 방법을 분석자 스스로 설계할 수도 있습니다.

    • @백경민-j1l
      @백경민-j1l 3 ปีที่แล้ว

      @@kykwahk 답변 감사드립니다!

  • @수긔
    @수긔 9 หลายเดือนก่อน

    안녕하세요, 교수님. 강의 항상 잘 듣고 있습니다. 강의 내용 중 질문이 있습니다! 이 페널티회귀분석에서만 머신러닝과 같이 훈련 데이터와 테스트 데이터를 나누는 이유는 뭔가요?

    • @kykwahk
      @kykwahk  9 หลายเดือนก่อน

      페널티회귀분석은 주로 예측목적에 사용되기 때문에 일반적인 머신러닝에서처럼 모델의 생성을 위한 훈련 데이터와 모델의 성능을 평가하기 위한 테스트 데이터로 데이터셋을 분할했습니다. 이 강좌에서 다루고 있는 통계기법은 예측목적으로 사용할 수도 있지만(예를 들면, 회귀분석 종류) 대부분 수집한 데이터를 바탕으로 가설검정을 위해 활용하기 때문에 데이터셋을 분할할 필요가 없었고요.

    • @수긔
      @수긔 9 หลายเดือนก่อน

      @@kykwahk 그렇군요, 답변 감사합니다! 특별히 페널티회귀분석이 예측에 주로 사용되는 이유도 궁금합니다!

  • @deargmai
    @deargmai 2 ปีที่แล้ว

    교수님 친철하신 설명에 항상 감사드리고 있습니다. 질문이 있는데요,
    릿지나 라쏘회귀의 성능을 평가하실 때 모델에 숫자행렬 관측값을 제공해서성능을 산출하셨는데, 세 모델 성능차이 비교할 때는 모델 만으로 성능지표를 바로 산출하셨습니다. 이 때 resamples()함수에 숫자행렬을 입력하여 나온 값으로 비교하지 않았는데 그래도 괜찮은 건가요?

    • @kykwahk
      @kykwahk  2 ปีที่แล้ว

      세 모델의 성능 차이를 비교할 때는 테스트 데이터를 이용하지 않고 caret 패키지를 이용하여 교차검증한 결과를 사용해서 그렇습니다. 각 모델별로 교차검증 성능 지표를 표본추출하는 방식으로 성능을 비교했습니다. 반면에 앞서 각 개별 모델의 성능을 평가할 때는 테스트 데이터를 이용한 것이고요.

  • @dykang9932
    @dykang9932 2 ปีที่แล้ว

    안녕하세요 영상 잘 보았습니다.
    다름이 아니라 postresample을 통해 r squared를 보았는데 제가 알기론 adj r squared을 봐야하는 걸로 알고 있습니다 이 부분에 대한 함수라던지 코딩은 따로 정리가 되지 않았나요!? 따로 보는 방법은 없나요?

    • @kykwahk
      @kykwahk  2 ปีที่แล้ว +1

      네~ 말씀하신 대로 일반적으로 독립변수의 개수를 고려하여 과적합(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 2 ปีที่แล้ว

      @@kykwahk 설명 너무 감사합니다.
      제가 이해한 것으로는 일반 R squared는 모델의 설명력을 볼 수 있고, adjusted r squared은 각 다른 모델중 어떤 모델의 성능이 좋은지 비교할 때
      사용한다는 말씀이신 거죠?
      또 한 가지 질문 들일게 있습니다.
      릿지같은 경우 모든 변수들을 사용하기 때문에 p값이 전체 변수인 반면에 랏쏘같은 경우 중요한 변수만 추려서 쓰기에 p값이 릿지에 비해 줄어들 수 있다

    • @kykwahk
      @kykwahk  2 ปีที่แล้ว

      1. 네 일반적으로 그렇게 이해하시면 됩니다. 다만 Adjusted R-squared를 이용하여 "성능"이 좋은 모델을 선택한다기보다는 "간명도 관점에서 더 나은" 모델을 알려준다고 보시는 것이 좋을 듯합니다. "성능"이란 여러 가지 의미로 해석될 수 있으니까요.
      2. 페널티회귀분석(penalized regression analysis)은 p-값을 리포팅하지 않습니다. 왜냐하면 일반적으로 의미가 없다고 알려져 있기 때문입니다. 이에 대해서는 여러 가지 이슈/주장이 있습니다(예를 들면, 선택되는 변수가 매번 다를 수 있기 때문에 p-값이나 신뢰구간을 계산하기 위한 적절한 표집분포를 만들 수 없습니다). 아무튼 분석자 입장에서는 릿지는 모든 변수를 사용하고, 라소는 모델에 도움이 되는 일부 유용한 변수만 추려준다고 이해하시면 좋을 것 같습니다.
      3. 선형회귀분석에 L1-norm/L2-norm을 통해 페널티를 줌으로써 제약화(regularization)했던 것처럼 로지스틱회귀분석에도 동일한 방식을 적용할 수 있습니다. 이런 제약화를 통해 로지스틱회귀분석을 이용하여 분류분석을 할 때 변수의 개수를 효과적으로 줄일 수 있습니다. 다음 강의를 참고하세요.
      통계데이터분석 - 일반선형모델 - 페널티 로지스틱회귀분석(ridge, lasso, elasticnet) (th-cam.com/video/LxHMfr120gU/w-d-xo.html)

  • @박영빈-p9l
    @박영빈-p9l 2 ปีที่แล้ว

    강의 감사합니다! 질문이 있는데,
    cv.glmnet() 함수와 train() 함수 간에 차이점이 있는지 궁금합니다.
    cv.glmnet() 함수는 교차검증만 수행하고, train() 함수는 교차검증과 함께 최적의 파라미터를 찾는 기능을 하는 건가요?

    • @kykwahk
      @kykwahk  2 ปีที่แล้ว

      두 함수 모두 교차검증을 통해 최적의 패러미터를 탐색합니다. 하지만 caret 패키지의 train() 함수는 여기서 적용한 glmnet모델뿐만 아니라 매우 다양한 모델에 적용할 수 있습니다. 이 동영상 강의 아래에 관련 댓글들이 있으니 참고하시고요, 보다 구체적인 내용은 두 함수의 도움말을 살펴보세요.

    • @박영빈-p9l
      @박영빈-p9l 2 ปีที่แล้ว

      @@kykwahk 답변 감사합니다!

  • @kykwahk
    @kykwahk  3 ปีที่แล้ว +2

    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
    😓 구독자분께서 앞의 내용에 대한 질문을 남겼었는데요, 제가 댓글을 달면서 실수로 질문을 삭제했습니다. 그래서 여기에 답글만 남겨요.💦

    • @고해로
      @고해로 3 ปีที่แล้ว

      아 저의 화면에는 삭제가 안 되었는데요^^
      설명주신 train() 함수를 조사해보니 앙상블이나 머신러닝에서 grid와 control 등의 모델 튜닝을 위한 인자 설정이 굉장히 복잡해 보이네요. 적용하는 각 모델마다 어떻게 설정해야 할지 막막하긴 한데요. 한글로 제대로 잘 설명해주는 것이 안보이네요. 열심히 더 찾아보곘습니다.^^ 감사합니다.~