또자의 코딩교실

[스마트인재개발원] 머신러닝 - 정규화 본문

코딩공부/머신러닝 & 딥러닝

[스마트인재개발원] 머신러닝 - 정규화

또자자 2021. 12. 9. 00:11

blog tumbnail

이번시간에는 컬럼데이터의 분포를 정규분포로 만드는 작업인 정규화(Normaliztion)에 대해 알아보자.

대충 저런 그래프를 저런 정규화된 정규분포표 곡선을 닮게 만들도록 갱생시키는 과정이라 생각하면 제일 이해가 빠르다.

 

정규화(Normalization)

  • 하는 목적은?
    • 데이터는 정규분포를 따라가는 경향이 있고 중앙 표준편차에 맞춰서 정규화를 시키려는 목적에 따라 정규분포값에 맞춰 데이터를 조정하는 것이다.
    • 통계학에 기반하여 정규분포형태의 데이터라면 성능이 좋아지는 경향이 있다.
  • 방법은?
    • 머신러닝 회귀모델을 사용하여 값을 예측해 데이터를 조정하고
    • 정규화 과정에 log함수를 사용한다.
      • 왜 log함수를 사용하는가? :
        • 정규분포로 만들어주는 작업등은 로그함수 말고도 루트를 씌워서 변환하기도 하나 대표적으로 로그함수를 통해 정규화시키는 작업을 진행하게 된다.
        • x=0~1구간의 값들은 급격한 기울기를 지니고 변화도가 상당하다.
      • 하지만 X값이 증가하면 증가할수록 완만한 기울기를 가지고 있는데, x값이 작을수록 히스토그램의 막대간의 간격이 멀어지고 데이터의 차이가 커 과대적합을 유발하기 쉽다. 따라서 히스토그램의 막대 간격이 가까워져 분포가 가운데로 오는 경향이 있다. 따라서 X값을 조정해주면 데이터들끼리의 간격이 안정화 되어 좋은 데이터가 될 수 있다.
    • log함수의 값이 0이 되는 값인 1이 될수록 데이터는 연산하기 쉬워진다.
      • log함수에서 x값이 0에 가까워질수록 마이너스-무한대로 발산하기때문이다.
      • 보다 정확한 데이터가 되어 모델학습을 시키고 평가하였을때 정확도를 더 끌어올릴 수 있다.
    • 따라서 로그함수 뒤에 r(0=<r=<1)의 수를 더하여 X값을 조정한다. 
    • 이후 0~1까지의 값 X_log.iloc(x전체 범위,y는 0에서부터 1까지)에 따라 .skew()함수를 이용하여 비대칭도를 확인한다.
    • 비대칭도가 0이 될수록 정확한 정규화가 이루어졌다 판단할 수 있다.
 
아래는 실제 정규화를 진행한 실습코드이다.
#데이터의 비대칭도 확인
#양의 값이 왼쪽으로 쏠려있으며 음수값은 오른쪽으로 쏠려있음.
#skew함수를 통해 비대칭도 확인
X.iloc[:,-1].skew()
#실행결과
3.5311191796708394

#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#그래프 시각화
# bincount : 0 이상의 정수값들의 카운트를 표기해줌.
bins = np.bincount(X.iloc[:,1])
plt.bar(range(len(bins)), bins) #bar속성 뒤로 표시할 x값의 범위, y값의 범위

print(len(bins))
plt.xlabel('value')
plt.ylabel('count')
plt.show()

#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#log함수를 통한 정규화
(X+1).describe()

# 기초적인 통계와 사분위수를 제공
X_log = np.log(X+1)
X_log.iloc[:,1]

#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#log함수를 적용시킨 그래프 시각화
plt.hist(X_log.iloc[:,1],bins=30) 
#bins=30 : 전체구간을 30개로 구분지어 막대를 세우자.
plt.xlabel('value')
plt.ylabel('count')
plt.show()

#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#log함수를 적용시킨 X_log의 비대칭도 확인하기
X_log.iloc[:,1].skew() 

#실행결과
0.03713222980990136

착실히 그래프가 갱신불가의 상태에서 정규분포표의 형태에 나름 가까워진것을 확인할 수 있다.

skew함수로 산출된 비대칭도 또한 0에 가까워진 모습!

Comments