일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- docker
- React
- python
- 기초 수학
- nginx
- 블레이드 템플릿
- nodejs
- Machine Learning
- fastapi
- linux
- AWS
- NCP
- phpredis
- Babel
- Redux
- For
- SQL
- Switch
- laravel
- Go
- rabbitmq
- php
- CentOS
- mariadb
- Node
- javascript
- Redis
- deep learning
- webpack
- Backbone.js
- Today
- Total
개발일기
기초 수학 - 데이터 정규화(Data Normalization) 본문
기초 수학 - 데이터 정규화(Data Normalization)
Flashback 2024. 7. 20. 22:08
데이터 정규화(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
https://www.techtarget.com/whatis/definition/mu
https://www.datacamp.com/tutorial/normalization-in-machine-learning
https://colab.research.google.com/drive/101eF5qQeUA85Sfd_wsFCYLL4-mg-oLvO
https://www.buymeacoffee.com/flashback_music
'Deep Learning, Machine Learning > 기초 수학' 카테고리의 다른 글
기초 수학 - 시그모이드(Sigmoid) 함수 (0) | 2024.10.11 |
---|---|
기초 수학 - ROC Curve와 AUC (0) | 2024.07.15 |
기초 수학 - 혼동 행렬(The Confusion Matrix) (0) | 2024.07.15 |
기초 수학 - 적분(Integration)의 개념(부정 적분, 정적분) (0) | 2024.07.14 |
기초 수학 - 편미분과 선형 회귀 모델 응용 (0) | 2024.07.07 |