JupyterNotebook이나 JupyterLab에서 데이터를 불러와서 기술통계 및 데이터타입 확인(+변경)을 하고, 데이터 표준화(standardization)로 outlier까지 제거했다면, 이제는 분석 전에 데이터를 정규화(normalization)하여 데이터의 scale을 맞춰야 한다.
일명 rescaling으로 불리는 정규화! normalization을 왜 해야하는지, 그리고 파이썬 코드로 어떻게 짜는지 아주 쉽게 알아보고자 한다.
정규화(normalization), 왜 하는가?
각 컬럼에 들어있는 데이터의 상대적 크기로 분석결과가 달라질 수 있다. 예를 들어 A변수는 0~1000까지의 값을, B변수는 0~10까지의 값을 갖는다고 하자. 이 경우 상대적으로 큰 숫자 값을 갖는 A변수의 영향이 더 커진다. 따라서 숫자 데이터의 상대적인 크기 차이를 제거할 필요가 있다. 즉, 데이터의 scale을 통일해야하는데, 이것을 rescaling이라고 한다. (normalization은 rescaling의 하나의 방법)
정규화(normalization), 어떻게 하는가?
모든 컬럼에 있는 데이터를 최소0, 최대1 사이의 비율 값으로 다 바꾼다. 데이터들을 각 컬럼의 최대값으로 나눴다고 생각하면 쉬운데, 데이터에 마이너스(-) 값들이 있을 수 있다. 그래서 최소값을 분모, 분자에 최소값을 빼주는 것이 필요하다.
정규화(normalization), 파이썬 코드는?
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df[ : ] = scaler.fit_transform(df[ : ]) |
이 코드는 파이썬 관련 책에 안나오기도 한다. (블로그 포스팅하면서 공부하려고 책을 샀는데 거기서는 저 산식을 입력하는 것을 알려줌.)
저 코드를 쓰면, 모든 컬럼에 있는 데이터를 0~1 사이의 값으로 변환시킬 수 있다. (무려 한방에!)
실제 수업때 배운 내용은 아래와 같다.
정규화(normalization)를 하지 않으면?
수치가 큰 데이터가 큰 영향을 준다는 엉뚱한 결과가 나오거나, 변화패턴이 잡히지 않아 머신러닝 시 학습이 불가능하다.
아래는 정규화를 하지 않아서(df4는 정규화하지 않은 데이터프레임) 변화패턴이 잡히지 않는 경우다.
동일한 데이터를 정규화를 거치고(df7이 정규화한 데이터프레임) 학습시키면, 값이 나온다.
지금까지 정규화가 어떤 것인지, 어떻게 하면 되는지, 파이썬 코드는 어떻게 짜는지에 대해 알아보았다. 조금 더 일찍 이런 내용을 알았다면 회사에서 분석할 때 활용해봤을것 같은데 해보지 못해서 아쉽다. 복직하면 분석할 때 정규화해서 해봐야지!!
정규화, normalization의 개념을 정확히 알게 된 것은 드립력으로 배우는 머신러닝 강의 덕분이다. 이전까지 어렵게만 느꼈던 통계의 개념을 쉽고 정확하게 알려주니, 기초반 완전 강추!
* 위 내용은 내돈내고(!) '드립력으로 머신러닝 배우기 기초반, 중급반'에서 배운 내용이다.
** 혹시 수정되어야 할 부분이 있으면 댓글로 알려주세요! (저도 공부하는 중입니다 ^^)
'낭만적(?) 일상 > 파이썬, 데이터분석' 카테고리의 다른 글
날짜(date)를 인덱스(index)로 만드는 파이썬 코드 (0) | 2019.07.06 |
---|---|
데이터 표준화(standardization), 정규화(normalization) 차이점 (0) | 2019.06.30 |
파이썬 전처리②표준화(standardization)로 이상치제거 (2) | 2019.06.28 |
파이썬 전처리①결측치 확인, 결측치 처리(제외)하기 (5) | 2019.06.27 |
파이썬 기술통계, 데이터타입 확인, 데이터타입 변경 (0) | 2019.06.27 |