학습 자료: 파이썬 머신러닝 완벽 가이드(개정2판), 위키북스
선형 회귀 모델을 위한 데이터 변환
개요
선형 회귀 모델은 피처값(X)과 타깃값(Y)의 분포가 정규 분포 형태를 매우 선호한다.
특히 타깃값의 경우 정규 분포 형태가 아니라 특정값의 분포가 치우친 왜곡(Skew)된 형태의 분포도일 경우 예측 성능에 부정적인 영향을 미칠 가능성이 높다.
따라서 선형 회귀 모델을 적용하기 전에 먼저 데이터에 대한 스케일링/정규화 작업을 수행하는 것이 일반적이다.
일반적으로 피처(X) 데이터셋에 적용하는 변환 작업은 다음과 같은 방법이 있을 수 있다.
1. StandardScaler을 이용해 표준화를 수행하거나 MinMaxScaler을 이용해 정규화를 수행
2. (1번 방법을 통한 성능 향상이 없을 경우)스케일링/정규화를 수행한 데이터셋에 다시 다항 특성을 적용하여 변환
3. 원래 값에 log 함수를 적용하여 로그 변환(Log Transformation) 수행
(+ 중요 피처의 이상치 값 제거)
타깃값(Y)의 경우는 일반적으로 로그 변환을 적용한다.
사이파이 stats 모듈의 skew() 함수를 이용해 칼럼 데이터셋의 왜곡된 정도를 쉽게 추출할 수 있다.
일반적으로 반환값이 1 이상인 경우를 왜곡 정도가 높다고 판단한다.
단, 원-핫 인코딩된 카테고리 숫자형 피처에 적용해서는 안 된다.
일단 대략의 데이터 가공과 모델 최적화를 수행한 뒤 다시 이에 기반한 여러 가지 기법의 데이터 가공과 하이퍼 파라미터 기반의 모델 최적화를 반복적으로 수행하는 것이 바람직한 머신러닝 모델 생성 과정이다.
로그 변환
로그 변환을 수행할 경우 언더 플로우 예방을 위해 np.log1p()를 이용한다.
피처값(X)에서 변환을 수행할 경우, 훈련 데이터와 테스트 데이터 모두에서 로그로 변환해서 예측을 수행한다.
타깃값(Y)에서 변환을 수행할 경우, 훈련 데이터에서 로그를 변환한 뒤 예측값에서 np.expm1() 을 사용해 원래 스케일로 되돌린 뒤 예측을 수행해야 한다.
로지스틱 회귀
개요
선형 회귀 방식을 분류에 적용한 알고리즘
로지스틱 회귀 역시 선형 회귀 계열이지만, 일반적인 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid) 함수 최적선을 찾고 이 시그모이드 함수의 반환 값을 확률로 간주해 확률에 따라 분류를 결정한다는 것이다.
시그모이드 함수는 x 값이 +, -로 아무리 커지거나 작아져도 y값은 항상 0과 1 사이 값을 반환한다.
x 값이 커지면 1에 근사하며 x 값이 작아지면 0에 근사한다. 그리고 x가 0일 때는 0.5이다.
사이킷런
LogisticRegression()
회귀 트리
회귀 함수가 아닌 트리를 기반으로 하는 회귀 방식이다.
분류 트리와 크게 다르지 않지만, 리프 노드에서 예측 결정 값을 만드는 과정에 차이가 있다. 분류 트리가 특정 클래스 레이블을 결정하는 것과는 달리 회귀 트리는 리프 노드에 속한 데이터 값의 평균값을 구해 회귀 예측값을 계산한다.
사이킷런
- DecisionTreeRegressor()
- GradientBoostingRegressor()
- XGBRegressor()
- LGBMRegressor()
선형 회귀는 직선으로 예측 회귀선을 표현하지만, 회귀 트리의 경우 분할되는 데이터 지점에 따라 브랜치를 만들면서 계단 형태로 회귀선을 만든다.
회귀 모델의 예측 결과 혼합을 통한 최종 예측
예측 결과 혼합 방식은 매우 간단하다. 가령 A 모델과 B 모델, 두 모델의 예측값이 있다면 A 모델 예측값의 40%, B 모델 예측값의 60%를 더해서 최종 회귀 값으로 예측하는 것이다.(성능이 좋은 쪽에 더 높은 가중치 부여)
A 회귀 모델의 예측값이 [100, 80, 60]이고, B 회귀 모델의 예측값이 [120, 80, 50]이라면 최종 회귀 예측값은 [100*0.4 + 120*0.6, 80*0.4 + 80*0.6, 60*0.4 + 50*0.6] = [112, 80, 54]가 된다.
스태킹 모델도 분류와 동일한 방식으로 적용 가능하다.
'ML' 카테고리의 다른 글
[머신러닝/사이킷런] 회귀: 다항 회귀, 편향-분산 트레이드오프, 규제 선형 모델 (0) | 2025.03.03 |
---|---|
[머신러닝/사이킷런] 회귀: 선형 회귀, 경사하강법, 평가 (0) | 2025.02.26 |
[머신러닝/사이킷런] 데이터 가공: 언더&오버 샘플링, 로그 변환, 이상치 제거 (0) | 2025.02.24 |