원핫 인코딩(One-hot encoding)
- 단어 집합의 크기를 벡터의 차원으로 하여 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식이다.
- 원핫 인코딩을 두 가지 과정으로 정리해보면,
- 각 단어에 고유한 인덱스를 부여(정수 인코딩)한다.
- 표현하고 싶은 단어의 인덱스의 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여한다.
- 그 이유는,
- 사람이 매우 쉽게 이해할 수 있는 데이터를 컴퓨터에게 주입시키기 위함이다.
- 사이킷런(scikit-learn)에서 제공하는 머신러닝 알고리즘은 문자열 값을 입력 값으로 허락하지 않기 때문에 모든 문자열 값들을 숫자형으로 인코딩하는 전처리 작업(Preprocessing) 후에 머신러닝 모델에 학습을 시켜야 한다.
데이터 준비
1 |
|
City
컬럼에 있는 데이터는 도시 지역을 구분하는 범주형 변수(Categorical vaiable)이다.- 범주형 자료: 순서가 없는 명목형(Nominal) 또는 순서가 있는 순서형(Ordinal)
- 도시는 높고 낮음이 없으므로 명목형 범주형 변수이다.
범주형 변수를 원핫 인코딩으로 변환
Color
변수를 원핫 인코딩으로 변환해 가능한 모든 범주를 열로 나타sosek.
1 |
|
1 |
|
- 원핫 인코딩을 수행하면 각 카테고리에 해당하는 변수들이 모두 차원에 더해지게 된다.
- 그러므로 카테고리가 너무 많은 경우(high cardinality)에는 사용하기 적합하지 않다.
- 그럴 땐 Catboost)를 사용하면 된다.
1 |
|
선형 회귀 모델 원핫 인코딩 특성 사용
1 |
|
1 |
|
카테고리 인코더(Category_encoders)
- 카테고리 인코더 라이브러리를 사용하면 범주형 데이터에만(‘City’) 원핫 인코딩을 수행할 수 있다.
1 |
|
1 |
|
특성 선택(Feature Selection)
- 특성 공학은 과제에 적합한 특성을 만들어 내는 과정이다.
- 이 프로세스는 실무 현장에서 가장 많은 시간이 소요되는 작업 중 하나이다.
SelectKBest
를 사용하면 특성이 많아도 쉽게 타겟값과 가장 상관관계를 높게 가지는 것들을 선택할 수 있다.
데이터 준비
1 |
|
1 |
|
1 |
|
새로운 특성을 생성하고 삭제
1 |
|
- 가능한 방법이 많은데 필요한 좋은 특성을 뽑기엔, 수작업으로 할 수 없으니
SelectKBest
를 사용해서 유용한 특성들을 찾아본다. - 좋은 특성을 뽑는 방법은 특성들 끼리는 상관성이 적으면서 타겟 특성과는 상관관계가 큰 것을 뽑는다.
데이터를 훈련/테스트 데이터로 분리
1 |
|
SelectKBest 이용
1 |
|
선택된 특성
1 |
|
특성의 수 결정
1 |
|
- 15개를 사용했을 때와 18개를 사용했을 때가 거의 차이가 나지 않으므로 코스트(Cost)를 생각하여 15개만 사용하는 것이 좋다.
릿지 회귀(Ridge Regression)
- 릿지 회귀는 기존 다중회귀선을 훈련데이터에 덜 적합되도록 만든다. 그 결과로 더 좋은 모델이 만들어진다.
- n: 샘플수, p: 특성수, $\lambda$: 튜닝 파라미터(패널티)
- alpha, lambda, regularization parameter, penalty term 모두 같은 뜻이다.
릿지 회귀를 사용하는 이유
- 과적합을 줄이기 위해서 사용한다.
- 과적합을 줄이는 간단한 방법 중 한 가지는 모델의 복잡도를 줄이는 것이다.
- 특성의 갯수를 줄이거나 모델을 단순한 모양으로 적합하는 것이 좋다.
- 편향을 조금 더하고, 분산을 줄이는 방법으로 정규화(Regularization)를 수행한다.
- 정규화는 모델을 변형하여 과적합을 완화해 일반화 성능을 높여주기 위한 기법을 말한다.
- 정규화의 강도를 조절해주는 패널티값인 람다는 다음과 같은 성질이 있다.
- $\lambda$ → 0, $\beta_{ridge}$ → $\beta_{OLS}$
- $\lambda$ → ∞, $\beta_{ridge}$ → 0.
OLS vs 릿지 회귀
1 |
|
OLS
1 |
|
릿지 회귀
- $\lambda$ 값을 증가시키며 그래프를 통해 회귀 계수의 변화를 살펴본다.
1 |
|
- 그래프를 보면, 알파(alpha)가 0인 경우에는 OLS와 같은 그래프 형태로 같은 모델임을 확인 할 수 있고, 알파 값이 커질 수록 직선의 기울기가 0에 가까워지면서 평균 베이스라인 모델(baseline)과 비슷해지는 모습을 볼 수 있다.
- 이 패널티 값을 보다 효율적으로 구할 수 있는 방법은,
- 특별한 공식이 있는 것은 아니며, 여러 패널티 값을 가지고 검증 실험을 해보는 방법을 사용한다.
- 교차 검증(Cross-validation)을 사용해 훈련/검증 데이터를 나누어 검증 실험을 진행하면 된다.
릿지CV(RidgeCV)를 통한 최적 패널티(alpha, lambda) 검증
1 |
|
- 릿지 회귀 직선의 생김새는 OLS와 매우 비슷하지만 이상치(outlier) 영향을 받는다.
1 |
|
집값 데이터에서 확인
- 집값 예측 데이터로 돌아와서, 릿지 회귀의 패널티에 대한 영향을 확인한다. 특성은
sqft_living
을 사용한다.
1 |
|
여러 특성 사용 릿지 회귀 학습
다항 함수에 릿지 회귀 적용
- 다수의 특성을 사용하는 다항 함수에 릿지 회귀를 사용하면 정규화 효과를 더 잘 확인할 수 있다.
1 |
|
최종 모델
- 최종 모델을 만들기 위해서는 가지고 있는 데이터를 다 사용해 최적의 모델을 만들어야 한다.
- 지금 가지고 있는 테스트 데이터를 검증 데이터로 사용하려면 릿지CV에 훈련 데이터로 함께 넣어 주어야 한다.
- 릿지CV 내에서 훈련 데이터를 훈련/검증 데이터로 나누어 최고 스코어를 가지는 알파를 찾아준다.
1 |
|
회귀 계수 그래프
- 몇몇 중요한 특성들만 회귀 계수가 크고 대부분 0 근처에 있음을 볼 수 있다.
1 |
|