-
데이터 변환_인코딩machine learning 2024. 2. 25. 16:18
인코딩(Encoding)은 범주형 데이터를 수치형 데이터로 변환하는 과정이다. 이는 텍스트나 범주형 데이터를 모델이 이해할 수 있는 형태로 변환하는 것으로, 데이터에 포함된 정보를 모델이 해석하기 쉬운 형태로 변환하는 것이다. 다양한 인코딩 방식을 사용한다면 데이터의 의미를 수치적으로 표현할 수 있다.
원 핫 인코딩의 경우, 범주 간의 명확한 구분을 제공하는 인코딩 방식인 반면, 차원의 갯수가 늘어나 차원의 저주가 발생할 수 있는 반면, 레이블 인코딩의 경우 범주 간의 순서나 등급 정보를 제공하여 표현할 수있다.
대표적인 인코딩 방식에 대한 설명과 사용 목적, 의의와 한계를 한번 살펴보자.
1. One Hot Encoding
- 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 그렇지 않은 단어의 인덱스에는 0의 값을 부여하는 단어의 벡터 표현 방식으로, 표현하고자 하는 단어의 수가 곧 차원이 된다.
- 한 가지 유형이 하나의 벡터로 표현된다는 점에서 독립적이고 직관적이며,
- 범주 간의 순서나 등급을 반영하지 않는 인코딩 방식이다.
- 벡터로 표현될 수 있지만 sparsity한 성격으로 인해 내적으로 인한 거리 측정이 불가능하고 (범주간 유사도 측정 불가),
- 범주가 늘어날 수록 벡터의 차원이 높아진다는 점에서 차원의 저주 문제가 발생할 수 있다.
더보기<< 차원의 저주 : Curse of Dimensionality >>
차원의 저주는 고차원 공간에서 데이터를 분석하고 모델링할 때 발생하는 여러 가지 문제들을 총칭하는 용어이다.
차원의 저주가 발생하는 이유는,
① 데이터 희박성 (Data Sparsity) : 차원이 증가하게 되면 공간을 채우기 위해 많은 양의 데이터가 필요한데, 주어진 데이터에 대해 차원을 늘리게 되면 늘어난 고차원의 공간에서 데이터 포인트들 간 거리가 멀어지게 되고, 멀어진 거리로 인해 모델은 데이터 간의 관계를 학습하기 어려워지게 된다.
② 거리 측정의 방법론적 한계 : 고차원에서는 유클리드 거리와 같은 측정 지표가 덜 유용해짐에 따라, 새로운 거리 개념이 필요하게 되고, 이에 따라 기존의 알고리즘이 정확하게 작동하지 않게 될 수 있다.
③ Overfitting의 발생 : 차원의 증가는 가능한 변수간의 상호작용도 증가함을 의미하며, 그 결과 모델의 복잡성이 높아짐에 따른 과적합(Overfitting)의 위험이 높아지게 된다.
④ 계산 비용의 증가 : 고차원의 변수 간 상호작용을 고려해야한다는 점에서 계산 비용이 증가하게 되며, 차원 측소 및 feature selection 등의 기법 적용을 위한 계산이 추가적으로 필요하게 된다.
차원의 저주문제를 완화하기 위해서는,
① 차원 축소 : PCA, t-SNE, LDA 등의 기법을 사용하여 데이터의 중요 특성을 유지하면서 차원을 축소하거나,
② 특성 선택(Feature Selection) : EDA 혹은 모델 기반 기법을 사용하여 불필요한 특성을 제거하거나,
③ 정규화(Regularization) : L1, L2 정규화 등을 통한 과적합을 방지하는 방법이 있다.- LabelBinarizer를 사용하는 방법
- 객체(lb.classes_) 안에 unique value를 저장한 뒤에 encoding을 진행
- 단일 column의 feature를 encoding할 목적으로 사용되는 방법
- unique value가 2개일 때는 한 개의 차원에서 0과 1로 data를 표현하고,
- unique value가 3개 이상일 때는 n개의 차원에서 sparse matrix로 데이터 표현
- 하나의 객체를 생성하여 2개 이상의 columns feature들을 encoding 할 경우, classes_의 객체가 갱신됨
from sklearn.preprocessing import LabelBinarizer # 객체 생성 lb = LabelBinarizer() # encoding을 위한 unique value를 .classes_에 저장 lb.fit(df) # lb.classes_에 저장된 unique value를 기초로 encoding 진행 lb.transfrom(df) # fit과 transform을 동시에 진행 lb.fit_transform(df)
- pd.get_dummies()를 사용하는 방법
- 범주형 변수를 dummy 변수로 변환하여 새로운 데이터프레임을 생성하는 pandas 함수
- 기본적으로 n개의 unique value가 있을 때 n개의 차원으로 원 핫 인코딩이 진행되며,
- drop_first=True를 통해 첫 번째 범주를 대표하는 dummy 변수를 제거하여 n-1개의 벡터로 원 핫 인코딩 진행 가능(이 때 첫 번째 범주는 0으로 채워진 벡터로 표현됨)
df = pd.get_dummies(df, drop_first=False or True)
더보기<< drop_first를 True로 설정하는게 좋을까, False로 설정하는게 좋을까?>>
분석의 목적과 사용하는 모델의 종류, 데이터의 특성에 따라 장단점이 나뉘게 된다.
[drop_first = True]의 장점과 단점
① 다중 공선성(multi-collinearity) 방지 : 첫 번째 범주에 대한 column을 제거하여 나머지 dummy 변수들 간의 완벽한 다중 공선성을 방지할 수 있으며, 이는 다중 공선성에 민감한 모델(linear regression model)에서 유용
② 차원 축소 가능 : 표현되는 벡터의 차원이 1차원 줄어들어 overfitting의 위험 감소 가능
③ 정보 손실의 가능성 : 첫 번째 범주에 대한 명시적인 column이 사라진다는 점에서 정보의 손실이 발생하고, 이 경우 모델 해석에 제한되는 문제 발생
[drop_first = False]의 장점과 단점
① 모델 해석이 용이 : 손실되는 정보 없이 모든 범주의 column이 존재한다는 점에서 모델 해석에 용이하며, decision tree와 random forest와 같은 모델에서는 각 범주의 영향력을 명확하게 파악 가능
② 다중 공선성 문제 : 선형 모델에서 다중 공선성 문제로 인한 모델 추정치의 정확성과 안정성이 저하될 수 있음
③ 차원의 저주 : 고차원 벡터 사용에 따른 차원의 저주 발생<<< 다중 공선성(Multi-Collinearity) >>>
한 변수가 다른 변수들의 조합으로 에측될 수 있을 정도로 변수 간의 강한 선형 관계가 존재하는 상태를 의미하는 것으로, 두 개 이상의 독립 변수 사이에 높은 상관관계가 있을 때 발생한다. 이 때 변수는 column의 feature data를 의미하고 계수는 모델의 parameter(weights and biases)를 의미한다.
[다중 공선성의 문제점]
① 계수의 해석 어려움 : 변수의 계수 추정치가 데이터에 따라 크게 변할 수 있다는 점에서 다중 공선성이 높은 변수들이 모델에 포함될 경우, 각 변수의 영향력을 분리하여 해석하기 어려움
② 추정치의 불안정성 : 높은 다중 공선성은 변수의 계수 추정치가 불안정하게 되어, 작은 데이터 변화에도 추정치가 크게 변할 수 있으며 이는 모델의 신뢰도를 저하시킴
③ 과적합(Overfitting) 위험 증가 : 다중 공선성은 모델이 데이터의 노이즈에 과하게 반응하여, 새로운 데이터에 대한 예측 성능이 저하될 수 있는 과적합을 초래할 가능성.
[다중 공선성 진단 방법]
① 분산팽창계수(Variance Inflation Factor, VIF) : VIF 값이 10을 초과하면 해당 변수는 높은 다중 공선성을 가진 것으로 간주
② 상관 행렬 : 변수들 간의 상관 관계를 확인하여 높은 상관 관계를 가진 변수 쌍을 식별
[다중 공선성 대처 방법]
① 변수 제거 : 높은 다중 공선성을 가진 변수 중 하나를 모델에서 제거
② 변수 결합 : 상관 관계가 높은 변수들을 결합하여 새로운 변수를 생성
③ 정규화 기법 사용: 릿지(Ridge) 회귀나 라쏘(Lasso) 회귀와 같은 정규화 기법을 사용하여 다중 공선성 문제를 완화 (계수의 크기에 패널티를 부여하여 모델의 복잡도를 줄이는 방식으로 작동)LabelBinarizer와 OneHotEncoding
다양한 columns에 대한 원핫인코딩 방법
2. Label Encoding
3. Binary Encoding
Sparse-Encoding
- classification의 경우, 모델의 출력은 softmax 함수와 같은 activation function을 이용하여 각 클래스에 대한 확률이나 클래스 자체일 수 있고, 결국 가장 높은 확률을 갖는 클래스를 선택하는 것
- regression의 경우 모델의 출력은 목표 변수의 예측 값 자체.
'machine learning' 카테고리의 다른 글
가상 데이터의 활용 (0) 2024.02.25 데이터 축소 (0) 2024.02.25 데이터 변환_스케일링 (0) 2024.02.25 데이터 정제 (0) 2024.02.25 데이터 전처리 과정 (0) 2024.02.25