데이터 변환
1. 수치형 데이터
정규화(Normalize)
- MinMax 정규화는 변수의 최소값을 0, 최대값이 1이 되도록 변환합니다.
ex)
df_titanic에서 Age와 Fare의 최소값은 0, 최대값이 1이 되도록 변환합니다.
변환된 값을 변수명 뒤에 _n 을 붙여 Age_n, Fare_n 으로 저장합니다.
ex)
df_titanic에서 Age와 Fare의 최소값은 -1, 최대값이 1이 되도록 변환합니다.
변환된 값을 변수명 뒤에 _n을 붙여 Age_n, Fare_n 으로 저장합니다.
표준화(Standardize)
- 변수의 평균이 0, 표준편차가 1이 되도록 변환합니다.
- sklearn.preprocessing.StandardScaler는 편향 표준편차를 사용합니다. (Biased)
ex)
sklearn.preprocessing.StandardScaler를 통해 df_titanic에서 Age와 Fare를 표준화 합니다.
변환된 값을 변수명 뒤에 _s를 붙여 , Age_s, Fare_s으로 저장합니다.
ex)
Fare를 표준화 합니다. 표준화시 불편향(Unbiased) 표준편차를 사용합니다.
변환된 값은 Fare_s2에 저장합니다.
정규화와 표준화의 효과
- 회귀 분석시 정규화와 표준화를 통해 변수의 스케일을 균일화하여, 독립변수가 종속변수에 미치는 정도를 파악하기 쉽게 합니다.
- Ridge와 Lasso와 같은 모수의 크기에 대해 제약을 주는 모델에서 규제가 균일하게 적용되도록 합니다.
- Gradient Descent와 같은 공간 탐색 기반의 알고리즘에서 학습율과 변수들 간의 영향이 균일하도록 합니다.
거듭제곱 변환(Power Transformation)
- 변수의 분포를 우측 또는 좌측으로 치우친 정도를 조정합니다.
- 거듭수를 나타내는 파라메터 𝜆에 따라 변환함수가 달라집니다.
ex)
df_titanic λ=[-2, -1, -0.5, 0, 0.5, 1, 1.5, 2]에 따라 Power Transform된 Fare의 분포를 히스토그램으로 출력해봅니다.
𝜆가 0인 경우 log변환을 하게되는데 Fare의 최소값이 0이므로, Fare가 0인 경우가 존재합니다. 이 때 log 변환은 성립하지 않게 됩니다.이 때, log의 값이 미지수가 되어 버립니다. 이럴 경우 임의의 수를 더하여 0을 log로 취하는 것을 방지합니다.변환 후 최소값이 0이 되도록 𝑙𝑜𝑔(𝑋+1) 로 변환합니다.
ex)
df_titanic λ=[-2, -1, -0.5, 0, 0.5, 1, 1.5, 2]에 따라 Power Transform된 Age의 분포를 히스토그램으로 출력해봅니다.
이 때 Age의 결측치는 제외합니다.
Box-Cox 변환(Box-Cox Transformation)
- Power Transformation을 기반한 변환으로 정규 분포에 가까운 형태(정규 분포를 따르는 것은 보장못함.)로 변환합니다.
- 𝜆에 따라 변환함수가 달라집니다. 데이터에서 정규분포와 가깝게 해주는 𝜆를 찾아줍니다.
ex)
df_titanic λ=[-2, -1, -0.5, 0, 0.5, 1, 2]에 따라 Power Transform된 Age의 분포를 히스토그램으로 출력해봅니다.
이 때 Age의 결측치는 제외합니다. 여기에 box-cox Transformation의 결과까지 추가합니다.
2. 범주형 데이터
가변수화(One-Hot Encoding, 지시변수화)
범주형 변수를 모델에 포함시키기 위해, 각 수준(범주)마다 범주에 해당 여부를 나타내는 하나의 이진 변수를 할당시킵니다.
예를 들어, apple, banana, peach 범주들로 구성된 변수 fruit을 가변수해봅니다.
ex)
df_titanic에서 Pclass와 Embarked를 가변수화 합니다. Embarked의 결측은 최빈값으로 대체합니다.
가변수화한 후 새로운 데이터프레임을 만듭니다.
레이블 인코딩(Label Encoding)
범주형 변수들의 범주마다 고유의 숫자로 치환하는 처리법입니다.
sklearn.preprocessing.LabelEncoder
예를들어, apple, banana, peach 범주들로 구성된 범주형 변수 fruit를, 레이블 인코딩해봅니다.
ex)
df_titanic의 Embaked를 LabelEncoding을 해봅니다. Embarked의 결측은 최빈값으로 대체합니다.
Wow, wonderful blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your site is great, as well as the content!
Thank you
Thank you for your interest
wn9wv4