반응형

정규화(Normalization),  표준화(standardization), 이상치(outlier) 제거를 구현해본 코드입니다.

 

2021. 9. 17 - 최초작성



졍규화는 값을 0 ~ 1 사이의 범위로 바꾸는 것이고, 표준화는 평균이 0, 표준편차는 1 인 표준정규분포(standard normal distribution)로 바꾸는 것입니다.  표준화를 적용 후, -2 ~2 범위를 넘어가는 것을 이상치(outlier)로 봅니다. 

 

import numpy as np
from matplotlib import pyplot as plt

a = np.random.randint(-10,20,100)
a[0] = 100
a[1] = -100

fig, ax = plt.subplots(4)

a_max = a.max()
a_min = a.min()
a_ = ( a - a_min)/(a_max-a_min)


mean = np.mean(a)
std = np.std(a)
a_2 = (a - mean) /std


mask = np.logical_and(a_2 < 2, a_2 > -2)
a_3 = a_2[mask]

ax[0].plot(a)
ax[1].plot(a_)
ax[2].set_ylim([-7, 7])
ax[2].plot(a_2)
ax[3].set_ylim([-7, 7])
ax[3].plot(a_3)

ax[0].set_title('source')
ax[1].set_title('normalization')
ax[2].set_title('standardization')
ax[3].set_title('standardization & remove outlier')

fig.tight_layout()
plt.show()



그래프의 Y축을 보면 각 경우에 따라 범위가 다른 것을 볼 수 있습니다. 

마지막은 이상치를 제거해서 가장 높게 튀는 값과 가장 낮게 튀는 값이 제거되었습니다.

 



참고

 

https://soo-jjeong.tistory.com/121 

 

https://blog.finxter.com/how-to-find-outliers-in-python-easily/#Method_3_Remove_Outliers_From_NumPy_Array_Using_npmean_and_npstd 

 

https://stml.tistory.com/45 

 

https://stackoverflow.com/questions/38459793/numpy-boolean-indexing-multiple-conditions 

 

반응형

해본 것을 문서화하여 기록합니다.
부족함이 있지만 도움이 되었으면 합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">