티스토리 뷰

728x90

모델의 일반화 오차 종류 

편향 

  • 원래 의도한 기능과는 다르게 한 범주를 다른 범주보다 "특혜"를 주는 등 "불공정"한 결과를 만드는 오류 
  • 잘못된 가정으로 인해서 발생
  • 데이터가 실제로는 2차인데 선형으로 가정해서 과소 적합되는 형태

분산

  • 훈련 데이터에 있는 작은 변동에 모델이 과도하게 민감하게 반응해서 나타나는 것
  • 자유도가 높은 모델(고차 다항 회귀 모델)이 높은 분산을 가지기 쉬운데 분산이 커지면 과대 적합

줄일 수 없는 오차

  • 데이터 자체에 있는 잡음 때문에 발생
  • 이 오차는 모델을 가지고 제거할 수는 없고 데이터 소스를 수정하거나 이상치를 감지해서 제거하는 방법을 이용

정리

  • 모델의 일반화 오차는 세가지 오차의 합으로 표현
  • 모델의 복잡도가 커지면 분산이 늘어나고 편향이 줄어들고 반대로 모델의 복잡도가 줄어들면 편향이 커지고 분산이 작아지게 된다.
  • 이를 분산/편향 트레이드 오프라고 한다.

 

규제 

과대 적합을 줄이는 방법 중 하나로 자유도를 줄이는 방법이 있다. 자유도를 줄이기 위해서는 다항식의 차수를 줄이면 된다.


Loss

  •  L1 Loss:  실제 값과 예측치 사이의 오차의 절대값을 구한 후 전체를 더한다. 
       편차가 다른 경우 값이 다르게 나오지 않을 수 있습니다.
  •  L2 Loss: 오차 제곱 합: 이상치에 영향을 크게 받음
  • Outlier가 적당히 무시되기를 원하면 L1 Loss 를 사용
  • Outlier의 등장에 신경을 써야 하면 L2 Loss 를 사용
  • 극단치(outlier) : 통계적 자료분석의 결과를 왜곡시키거나, 자료 분석의 적절성을 위협하는 변수값 또는 사례 

 

L1 Loss(MAE, Mean Absolute Error) L2 loss(MSE, Mean squared Error)

 

일반화 시키는 방법

  • 공선성을 다루거나 잡음을 제거해서 과대 적합을 방지
  • 모델 복잡도에 패널티를 주는 방법: 규제(영향력이 적은 피처를 제거하거나 영향력을 감소)
더보기

Ridge: L2 정규화, 영향력을 감소
Lasso: L1 정규화, 영향력이 적은 피처가 제거되기도 함
Elaticnet: L1 과 L2 정규화의 조합

Ridge Lasso Elasticnet
  • L2 정규화라고 함
  • 패널티를 이용해서 분산을 줄이고 편향을 늘리는 방향으로 동작
  • SGDRegressor 클래스의 인스턴스를 만들 때 penalty를 l2로 설정하고 alpha로 베타값을 설정하면 된다.
  • Ridge 라는 클래스를 이용해서도 구현 가능
  • alpha 값을 크게 하면 일반적으로 오차가 줄어든다.


  • 잔차의 절대값을 더해서 규제를 가하는 방식
  • 절대값은 0에 가까울 때 미분을 할 수 없음
  • 몇 몇 특성을 선택하는 효과.유의미하지 않은 변수들의 계수를 0으로 만들어버리기도 한다.
  • 자동으로 특성 선택을 수행하고 희소 모델을 만든다. 
  • 릿지 와 라쏘의 혼합 모델
  • 규제 항은 릿지 와 회귀의 규제 항을 단순히 더해서 사용하면 혼합 정도는 혼합 비율 r을 사용해서 조절
  • r의 값이 0이면 릿지 회귀가 되고 1이면 라쏘 회귀가 된다.
  • 보통의 경우 선형 회귀는 규제가 있는 것이 대부분의 경우 좋은 성능을 나타내는데 기본적으로 릿지를 사용하고 특성이 몇 개만 적용되는 것으로 의심되면 라쏘나 엘라스틱넷이 조금 더 나은 성능을 발휘
  • Lasso는 공선성을 확인하지 않게 되면 문제를 일으키는 경우가 있기 때문에 엘라스틱넷을 선호  
  • sklearn 에서는 alpha를 적용하고 l1_ratio 에 l1 정규화 비율을 설정해서 수행
비용 함수 

   

 

조기 종료

  • 경사 하강법 과 같은 반복적인 학습 알고리즘을 규제하는 다른 방식은 검증 에러가 최소값에 도달하면 훈련을 중지시키는 것으로 조기 종료라고 합니다.
  • 훈련을 할 때 에러는 줄어드는 것이 일반적이지만 교차 검증을 수행할 때 에러가 일시적으로 멈추었다가 다시 상승하는 경우가 있는데 이 경우 훈련 데이터에 과대적합되기 시점입니다.
  • 조기 종료는 검증 에러가 최소에 도달하는 즉시 훈련을 멈추는 것
  • 이 경우는 반드시 훈련 데이터 와 검증하기 위한 데이터를 나누어서 수행을 해야 합니다.

 

선형 회귀에서의 데이터 변환 

  • 선형 회귀 모델은 피처 와 타겟 사이에 선형의 관계가 있다고 가정하고 최적의 선형 함수를 찾아서 결과를 예측하는 방식인데 가장 좋은 성능을 발휘하는 경우는 정규 분포에 가까운 형태인 경우 입니다.
  • 특정 값의 분포가 한쪽에 치우친 왜곡된 분포일 경우 예측 성능에 부정적인 영향을 미칠 가능성이 높음
  • 피처를 스케일링 하거나 정규화 작업을 수행해서 사용하는데 스케일링하거나 정규화 작업을 수행한 경우가 반드시 성능이 좋지만은 않기 때문에 중요 피처들이나 타겟 값의 분포가 심하게 왜곡된 경우에만 변환 작업을 수행
  • 타겟은 거의 대부분 로그 변환을 수행
  • 정규 분포로 변환을 하면 원래의 값을 찾을 수 없을 수 있기 때문
  • 일반 log 함수를 이용하게 되면 언더플로우가 발생할 수 있기 때문에 log 함수를 적용한 후 에 1을 더해서 언더플로우를 방지하는데 이에 사용되는 함수가 numpy.log1p()

sklearn을 이용해 피처 데이터 세트에 적용하는 변환 작업

  • StandardScaler(평균이 0 분산이 1인 표준 정규 분포를 가진 데이터 세트로 변환) 와 MinMaxScaler(최소값이 0 최대값이 1인 분포)
  • 앞에서 수행한 Scale 된 데이터에 다항 특성을 추가
  • log 함수를 적용하는 log 변환: 일반적으로 선형회귀에서 첫번째 방법으로는 성능 향상을 가져오는 경우가 거의 없으며 두번째 방법이 조금 더 유용하기는 한데 피처가 많은 경우 피처의 수가 기하 급수적으로 늘어나서 과대 적합이 발생할 가능성이 있어서 로그 변환을 많이 시도
728x90