개발일기

기초 수학 - 데이터 정규화(Data Normalization) 본문

Deep Learning, Machine Learning/기초 수학

기초 수학 - 데이터 정규화(Data Normalization)

Flashback 2024. 7. 20. 22:08
728x90
반응형

데이터 정규화(Data Normalization)

머신 러닝에서 데이터를 학습시키기 전에 데이터들을 정규화(Normalization)해야 한다. 보통 데이터는 특성마다 다른 수의 범위를 가지고 있다. A특성에서는 수의 범위가 0~1인 반면에 B특성에는 수의 범위가 20 ~ 3000 이런 식으로 이뤄질 수 있다. 데이터 크기의 불균형으로 인해 특성별 우선 순위가 잘못된 방향으로 설정될 수 있다. 이를 방지하고 모델을 제대로 학습시키기 위해 학습 전 데이터 정규화를 진행한다. 로 사용하는 정규화는 Min-Max Normalization 또는 Z-Score Normalization이 있다.

  • Min-Max Normalization: 특성 범위 내의 데이터 중에서 가장 작은 수는 0으로 변환하고 가장 큰 수는 1로 변환한다. 그 후, 다른 데이터들을 이 범위 내에 알맞은 수로 변환시킨다.
  • Z-Score Normalization: 데이터의 평균을 0, 표준 편차는 1의 특성을 가지도록 데이터를 변환한다. Min-Max Normalization과 같이 0~1 이라는 고정 범위 내에 데이터가 위치하는게 아니라 -1 ~ 1, -2 ~ 2 와 같이 표준 편차에 따라 범위가 변경된다.

 

Min-Max Normalization

Min-Max Normalization은 데이터에서 최소값을 뺀 식을 분모로 두고 최대값에서 최소값을 뺀 식을 분자로 두어 계산한다. 간단하게 정리하면 $ \frac{value - min}{max - min} $ 로 표현된다. tensor_list라는 임의의 벡터를 생성하고 정규화하여 결과를 확인할 수 있다.

Pytorch

# Min-Max Normalization Pytorch
import torch

tensor_list = torch.tensor([10., 16., 24., 38., 49., 62., 77., 81., 93., 100.])
min_item = torch.min(tensor_list)
max_item = torch.max(tensor_list)

print('min: ', min_item.item())
print('max: ', max_item.item())

min_max_normalized = (tensor_list - min_item) / (max_item - min_item)
print(min_max_normalized)

"""
min:  10.0
max:  100.0
tensor([0.0000, 0.0667, 0.1556, 0.3111, 0.4333, 0.5778, 0.7444, 0.7889, 0.9222,
        1.0000])
"""
  • torch.min(): 해당 텐서에서 최소값을 구한다.
  • torch.max(): 해당 텐서에서 최대값을 구한다.

수식을 바탕으로 계산하면 최소값 10은 0으로 변환되고 최대값 100은 1로 변환된다. 그 사이에 있는 텐서들은 최소값과 최대값 사이에서 정규화가 진행된다.

Tensorflow

# Min-Max Normalized Tensorflow
import tensorflow as tf

tensor_list = tf.Variable([10., 16., 24., 38., 49., 62., 77., 81., 93., 100.])

min_item = tf.reduce_min(tensor_list)
max_item = tf.reduce_max(tensor_list)

print('min: ', min_item.numpy())
print('max: ', max_item.numpy())

min_max_normalized = (tensor_list - min_item) / (max_item - min_item)
print(min_max_normalized.numpy())

"""
min:  10.0
max:  100.0
[0.         0.06666667 0.15555556 0.31111112 0.43333334 0.5777778
 0.74444443 0.7888889  0.9222222  1.        ]
"""
  • reduce_min(): 해당 텐서에서 최소값을 구한다.
  • reduce_max(): 해당 텐서에서 최대값을 구한다.

 

Z-Score Normalization

Z-score Normalization는 데이터에서 평균을 뺀 값을 분모로 두고 표준 편차를 분자로 한 형태다. $ \frac{value - \mu }{\sigma} $ 로 표현한다.

Pytorch

# Z-Score Normalization
import torch

tensor_list = torch.tensor([10., 20., 30., 40., 50., 60., 70., 80., 90., 100.])
tensor_avg = torch.mean(tensor_list) # 평균
tensor_std = torch.std(tensor_list) # 표준 편차

print('avg: ', tensor_avg)
print('std: ', tensor_std)

z_score_normalized = (tensor_list - tensor_avg) / tensor_std
print(z_score_normalized)

"""
avg:  tensor(55.)
std:  tensor(30.2765)
tensor([-1.4863, -1.1560, -0.8257, -0.4954, -0.1651,  0.1651,  0.4954,  0.8257,
         1.1560,  1.4863])
"""
  • torch.mean(): 텐서의 평균을 구한다.
  • torch.std(): 텐서의 표준 편차를 구한다.

수식을 바탕으로 계산하면 -1.4와 1.4를 사이의 데이터로 변환되었으며 평균에서 표준 편차 단위로 떨어진 정도를 바탕으로 정규화가 진행된다.

Tensorflow

# Z-Score Normalization Tensorflow
import tensorflow as tf

tensor_list = tf.Variable([10., 16., 24., 38., 49., 62., 77., 81., 93., 100.])
tensor_avg = tf.math.reduce_mean(tensor_list) # 평균
tensor_std = tf.math.reduce_std(tensor_list) # 표준 편차

print('avg: ', tensor_avg.numpy())
print('std: ', tensor_std.numpy())

z_score_normalized = (tensor_list - tensor_avg) / tensor_std
print(z_score_normalized)
  • tf.math.reduce_mean(): 텐서의 평균을 구한다.
  • tf.math.reduce_std(): 텐서의 표준 편차를 구한다.

참고 사이트:

https://www.codecademy.com/article/normalization

 

Normalization | Codecademy

This article describes why normalization is necessary. It also demonstrates the pros and cons of min-max normalization and z-score normalization.

www.codecademy.com

 

https://www.techtarget.com/whatis/definition/mu

 

What is Mu (µ) and what does it represent?

See how the Greek letter µ (Mu), representing one-millionth, applies across tech fields such as physics, electronics, magnetics and thermodynamics.

www.techtarget.com

 

https://www.datacamp.com/tutorial/normalization-in-machine-learning

 

https://colab.research.google.com/drive/101eF5qQeUA85Sfd_wsFCYLL4-mg-oLvO

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

https://www.buymeacoffee.com/flashback_music

 

Flashback

Hi, I'm a programmer and like to play games. :D

buymeacoffee.com

 

728x90
반응형
Comments