티스토리 뷰

데이터 표준화가 뭔지는 알겠는데 궁금증이 생긴다.

1. 무조건 표준화를 하면 좋은거 아닌가?
- 군집분석(KNN, SVM 등), 인공신경망에는 필수적

2. 어떨때는 fit(), transform()을 나눠쓰고 어떨때는 fit_transform()을 쓰는 것인가? 한번에 fit_transform()으로 가는게 무조건 좋은것인가?
- 학습, 테스트 데이터 분리전 처리가 간편함

3. 왜 transform() 이후에 커럼명을 다시 조합해주지?
- ndarray로 반환되므로

세 가지의 궁금증에 대한 답을 아래 책에서 확인할 수 있었다.

ㅁ 파이썬 머신러닝 완벽가이드 123p

~ 이렇게 가우시안 정규 분포를 가질 수 있도록 데이터를 변환하는 것은 몇몇 알고리즘에서 매우 중요합니다.
특히 사이킷런에서 구현한 RBF 커널을 이용하는 서포트벡터머신(SVM) 이나 선형회귀, 로지스틱 회귀는 데이터 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 사전에 표준화를 적용하는 것은 예측 성능 향상에 중요한 요소가 될 수 있습니다.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)
# transform()시 스케일 변환된 데이터 세트가 Numpy ndarray로 반환돼 이를 DataFrame으로 변환
iris_df_scaled = pd.DataFrame(data=iris_data, columns = iris.feature_names)

학습 데이터와 테스트 데이터의 fit(), transform(), fit_transform()을 이용해 스케일링 변환 시 유의할 점을 요약하면 다음과 같다.
1. 가능하다면 전체 데이터의 스케일링 변환을 적용한 뒤 학습과 테스트 데이터로 분리
2. 1이 여의치 않다면 테스트 데이터 변환시에는 fit()이나 fit_transform()을 적용하지 않고 학습 데이터로 이미 fit()된 scaler 객체를 이용해 transform()으로 변환


ㅁ 데이터 분석가가 반드시 알아야할 모든 것 237p

표준화는 각 관측치의 값이 전체 평균을 기준으로 어느 정도 떨어져 있는지 나타낼 때 사용한다.
표준화나 정규화는 KNN, 서포트벡터머신(SVM)과 같은 거리를 활용한 군집분석에서 필수적이다.
관측치가 군집의 중심점 혹은 다른 관측치와 어느 정도로 거리가 떨어져 있는지 측정함으로써 군집을 나누는데 변수(차원)마다 스케일이 제각각이면 군집이 제대로 분리될 수 없이 때문이다. 마찬가지로 범주화 알고리즘 인공신경망 모델에서도 ~ 수행 해줘야 한다.

변환된 값은 넘파이 ndarray 형태로 저장되기 때문에 다시 판다스 데이터프레임으로 변환해 준다.

---
확실히 파이썬 머신러닝 완벽가이드 설명이 자세하다. 그것도 유의할 점을 별도로 강조, 반복해주는 센스
데이터 분석가가 반드시 알아야할 모든 것은 좀더 비즈니스 친화적 선배 같고
파이썬 머신러닝 완벽가이드는 기술전공 선배 같다.

댓글