머신러닝 15. 지도학습: 다중공선성 해소를 위한 정규화&축소 모델
Written on October 22nd , 2019 by MJ 목차
1. 패키지 로딩 & 데이터셋 로딩
(1) 패키지 일괄 설치&로딩 사용자 정의 함수 설정 후 시행
(2) 데이터셋 로딩
(3) 데이터셋 분할 및 간단조회: initial_split() / str() / skimr::skim()
2. 데이터탐색: 다중공선성에 대한 의심을 중심으로
(1) 선형회귀분석 실시: stats::lm()
(2) 2개 예측변수 간 상관성 파악: cor()
3. 정규화 회귀분석
(1) 훈련/테스트데이터셋 모델링 후 구조 파악: model.matrix()
(2) 릿지모델에 훈련데이터 피팅: glmnet(alpha = 0) / plot()
(3) 릿지모델 피팅 결과 확인: $lambda / coef()
(4) 릿지모델에 훈련데이터 적용 후 교차검증: cv.glmnet() / plot()
(5) 릿지모델 성능 평가(MSE) 및 변수 중요도 파악
4. 축소 회귀분석
(1) 라쏘모델에 훈련데이터 피팅: glmnet(alpha = 1) / plot()
(2) 라쏘모델 피팅 결과 확인: cv.glmnet() / plot()
(3) 라쏘 성능 평가(MSE) 및 변수 중요도 파악
(4) 릿지모델과 라쏘모델 간 성능 비교
5. 엘라스틱 넷
(1) 라쏘모델에 훈련데이터 피팅: glmnet(alpha = 0~1) / plot()
(2) 모델간 비교: plot()
023
1. 일반회귀분석의 가정조건: 다중공선성(Multicollinearity) 문제
다중공선성이 있는 경우 –> 예측변수가 늘어날 수록 variance가 커지는 문제발생
-
고전적인 선형회귀모델에서는 회귀계수 추정을 위해 잔차의 제곱합을 계산하는 일종의 비용함수를 만들어서 비용함수가 최소가 되는 회귀계수를 추정하게 됨
-
하지만 다중공선성이 있는 독립변수들이 투입된 상태의 비용함수에서는 회귀계수의 영향력이 과다추정될 수 있음
-
분산팽창지수 vif(Variance Inflation Factor) 값이 10 이상이면 독립변수들간 강한 상관관계가 존재해 종속변수의 수치예측에 영향을 미침
-
다중 공선성은 모형의 일부 예측 변수가 다른 예측 변수와 상관되어 있을 때 발생하는 조건으로 회귀계수의 분산을 증가시켜 과다추정 계수를 만듬
-
예측변수와 반응변수 간에 유의한 관계가 있음에도 없는 것처럼 보이게 함
-
높은 상관 관계가 있는 예측변수의 계수 부호가 반대방향으로 나타나게 함
2. [A] 정규화(regularization)와 축소(Shrinkage) 회귀모델
-
일반적 선형회귀계수에 대한 제약조건/벌점/페널티을 추가함으로써 과최적화를 막는 방법으로 Regularized Method, Penalized Method, Contrained Least Squares라고도 함
-
고전적인 선형회귀모델의 회귀계수 추정시 사용하는 잔차의 제곱의 합을 계산하는 비용함수에 페널티(regularization) 함수라는 추가적인 수식을 붙여 회귀계수값들의 과다추정을 막고, 오버피팅도 방지함
-
기존의 잔차제곱합을 계산하는 비용함수에 페널티를 어떻게 줄 것인지에 따라 여러 개의 세부적인 회귀분석으로 나누어짐
-
데이터의 갯수에 비해 독립변수의 개수가 많을 때도 이런방식을 사용할 수 있음
-
릿지회귀모델(정규화)은 벌점을 부과해 중요도가 낮은 피처의 회귀계수를 거의 0에 가까운 수치로 만들어 줌
-
라소회귀모델(축소)은 벌점을 부과해 중요도가 낮은 피처의 회귀계수를 0으로 만들어 줌으로써 자동화된 피처선택을 수행하고 예측력을 높여줌
-
엘라스틱넷모델은 릿지모델의 페널티와 라소모델의 패털티를 결합해서 부과하는 모델임
릿지;능형(Ridge) 회귀모델
-
회귀계수 추정에 따른 잔차의 제곱합을 최소화하는 계산방식에다가 –> 회귀계수의 제곱합(squared sum of weights)을 최소화하는 제약조건 추가
-
Ridge 모형은 예측변수들의 회귀계수를 한꺼번에 축소시키면서 가중치가 클 수록 큰 페널티를 부과해 오버피팅을 억제하는 효과가 있는데, 이를 L2 regularization(벌점;페널티) 특성을 가짐
-
능형회귀는 변수가 많아 높은 분산을 가지는 상황에서 계수의 크기가 거의 동일한 크기일 때 성능이 좋음
-
정규화 된 회귀는 계수의 크기에 대한 제약을 가하고 점차적으로 0으로 축소하는 방식사용
-
제약 조건은 계수의 크기와 변동을 줄이는 데 도움이되며 모델의 분산을 줄여 예측력의 일관성을 유지해 줌
정규화 회귀모델의 조율파라미터(tuning parameter): lambdas(람다)
-
회귀모델의 각 피처별 회귀계수의 과다추정을 막기위해서 수축패널티를 0에서 무한까지 조절하면 예측모델의 편향과 분산값 사이의 절충(trade-off)이 발생함
-
이 둘의 합인 검정MSE가 최소인 지점을 찾게 되고 이 때의 계수 추정치를 구해 줌
● 회귀계수 튀는 부분을 잡아 냄. 변수 개수 그대로 남는다.
● 독립변수 결합해서 다중공선성 있는 것 찾아내서 잡아내는 것.
라쏘(LASSO) 회귀모델(Least Absolute Shrinkage and Selection Operator)
-
회귀계수 추정에 따른 잔차의 제곱합을 최소화하는 계산방식에다가 –> 회귀계수의 절대값의 합을 최소화하는 제약조건 추가
-
Lasso 모형은 일부 예측변수의 회귀계수가 먼저 0으로 수렴하는 특성을 가짐
-
작은 가중치(회귀계수)들은 거의 0으로 수렴하게 되며, 몇 개의 중요한 가중치만 남게되므로 피처선택(feature selection) 효과가 있는데, 이를 L1 regularization(벌점;페널티)이라고 함
-
적은 수의 설명변수가 상당히 큰 계수를 가질때 잘 작동함
● 변수의 수 줄임. 피처 셀렉션 되는 기법.
● 라쏘는 올가미라는 뜻.
엘라스틱넷(Elastic Net) 회귀모델
- Lasso와 Ridge의 제약조건을 결합한 모형으로 가중치의 절대값의 합과 제곱합을 동시에 최소화하는 제약조건을 가짐
● 기존의 회귀계수 구하는 공식 + 릿지와 라쏘의 방식 모두 집어넣음.
● 피처셀렉션하면서 전반적으로 데이터 줄여나가는 기법 씀.
3. [B] 데이터 축소(Data reduction) 방식
● 그룹핑, 유형과 등의 GNT에서 배운 기법
PCR(Principal Component Regression)
-
독립변수들의 주성분을 추출/이용해 회귀모델을 만듬
-
주성분들이 서로 직교하므로 다중공선성 발생하지 않음
-
상위 몇 개 주성분만 이용할 경우 라쏘처럼 일종의 regualization 효과를 발생시켜 모델이 오버피팅 현상도 완화됨
-
그러나 모델 해석은 어려울 수 있음
PLS(Partial Least Square) regression
-
PCR과 비교했을 때 변수변환 방식에서 차이가 남
-
PCR: 독립변수의 분산을 최대로 하는 축을 찾아 데이터를 전사(projection)하는 방식으로 독립변수만 변형함
-
PLS: 종속변수와 독립변수의 관계를 가장 잘 설명해주는 축을 찾아 전사하는 방식으로 종속변수와 독립변수 모두를 변형함
—————코딩——————————————————————————————————
1. 패키지 로딩 & 데이터셋 로딩
(1) 패키지 일괄 설치&로딩 사용자 정의 함수 설정 후 시행
(2) 데이터셋 로딩
(3) 데이터셋 분할 및 간단조회: initial_split() / str() / skimr::skim()
2. 데이터탐색: 다중공선성에 대한 의심을 중심으로
(1) 선형회귀분석 실시: stats::lm()
(2) 2개 예측변수 간 상관성 파악: cor()
3. 정규화 회귀분석
(1) 훈련/테스트데이터셋 모델링 후 구조 파악: model.matrix()
(2) 릿지모델에 훈련데이터 피팅: glmnet(alpha = 0) / plot()
(3) 릿지모델 피팅 결과 확인: $lambda / coef()
(4) 릿지모델에 훈련데이터 적용 후 교차검증: cv.glmnet() / plot()
(5) 릿지모델 성능 평가(MSE) 및 변수 중요도 파악
4. 축소 회귀분석
(1) 라쏘모델에 훈련데이터 피팅: glmnet(alpha = 1) / plot()
(2) 라쏘모델 피팅 결과 확인: cv.glmnet() / plot()
(3) 라쏘 성능 평가(MSE) 및 변수 중요도 파악
(4) 릿지모델과 라쏘모델 간 성능 비교
5. 엘라스틱 넷
(1) 라쏘모델에 훈련데이터 피팅: glmnet(alpha = 0-1) / plot()
(2) 모델간 비교: plot()
<참고 문헌="">참고>
- 최점기 박사님 강의