딥러닝 실행 전에 데이터 표준화(Normalization)와 정규화(Standardization)가 왜 필요할까? Kaggle 콘크리트 강도 계산(Calculate Concrete Strength) 데이터를 예시로 들어보자. 콘크리트 강도 계산 feature는 8개로 구성되어 있는데 각각 성질은 아래와 같다.
먼저 데이터가 어떻게 분포 되어있는지 확인해 봐야한다. Pandas와 Seaborn을 이용해 몇줄만으로 차트를 그릴 수 있지만, 추가 라이브러리 없이 Numpy와 Matplotlib만 이용해 보겠다.
마지막 Strength가 콘크리트 굳기로 목표값이다. 각 요소별 데이터값들의 그래프를 그려보았는데 값들의 범위가 너무 천차만별이다. 이렇게 값들의 범위가 다르면 제대로 훈련할 수 없다. 제대로 훈련하기 위해 정규화와 표준화가 필요한 이유다. 예를 들어 첫번째 시멘트 함류량(Cement component)에서 100 수치는 작은 값이지만 그 아래 그래프인 가소제 함유량(Superplasticizer)에서는 엄청나게 많은 양이다. 이 데이터를 기준을 세우고 통일 시켜야 한다. 이 글 에서도 나와있지만 여러가지 기준을 세우는 방법이 있다. 본인은 일반적으로 3가지 방법을 사용한다. Zscore가 만능이 아니다. 훈련만 잘 되면 그만 아닌가? 1. 데이터 수를 작게 만들기 → 소수점 곱해주기데이터에 일정한 소수 (Ex : 0.001)을 곱하여 데이터 자체를 작게 만드는 방법이다. 이렇게 하면 곱하지 않을 때 보다 데이터가 훨씬 안정적으로 인식하고 계산할 수 있게 된다. 본인은 가장 첫 번째로 이 방법을 사용한다.
각 데이터에 0.001을 곱하고 1030개 데이터중 1000개를 Train Data, 30개를 Test Data로 만든 것이다. 훈련을 마치고 그래프로 그려 확인해 보기 위해 다시 1000을 곱해 주어야 한다.
아래는 훈련 결과이다. 파란색점이 MPL로 구성하고 훈련한 모델이 예측(pred)한 결과이고 빨간색 점이 실제 값(Target)이다. 오차값은 각 그래프 값의 수직값을 봐야 한다. 수직으로 겹칠 수록 오차가 작은 것이다. 2. 정규화(Normalization)데이터를 정규화 시켜보자. 정규화 방법은 여기 를 참고하면 된다.
훈련이 끝나고 결과를 확인하기 위해 역정규화를 해주어야 한다.
결과는? 결과가 드라마틱하게 변할 수도 있고 아닐 수도 있다. 아니라고 해서 큰 실망 마시길 바란다. 3. 표준화(Standarization)가장 많이 사용하는 표준화를 할 것이다. 표준화 방법은 여기 를 참고하길 바란다. 표준화는 마지막에 MPL 풀 코드를 제시하겠다. 아래는 데이터의 표준화이다.
훈련 후 마지막에 역 표준화를 해 주어야 한다.
결과는? 드라마틱한 결과는 크게 하지 마시오(...) 아래는 표준화 중 Zscore를 이용한 MPL 코드이다.
각 Hyperparameter를 변경해 보고 결과를 각각 확인해 보자. 4. 전처리를 안한다면?이 데이터는 MPL에서는 다행이도 전처리에 큰 영향을 안
받는것 같기도 한데 전체 오타는 전처리보다 확실히 크다. 그래서 순서는 전처리 하지 않고 훈련해 보고 이건 아니다 싶으면 1 (소수점 곱하기) → 2 (정규화 Normalization) → 3 (표준화 Stardarization) 순서대로 전처리 해 보고 결과를 확인 후 가장 괜찮은 전처리 방법을 사용하자. |