Pandas

데이터 전처리 - 정규화

김천종 2022. 11. 8. 21:00
반응형

데이터셋에 변수들의 숫자 데이터 크기의 상대적 차이 떄문에 머신러닝 분석 결과가 달라질 수 있다.

ex) A변수는 0 ~ 10000 의 범위를 가지로 B변수는 0~10의 범위를 가질 때 상대적으로 큰 값인 A변수가 머신러닝 분석 결과에 더 큰 영향을 미친다.

 

따라서 이러한 데이터의 상대적인 크기 차이를 제거해야한다.

데이터를 각 열에 속하는 동일한 크기 기준으로 나눈 비율로 표현하는 것을 정규화(normalization)이라고 한다.

정규화를 거치면 데이터의 범위는 0~1 or -1~1 이 된다.

 

### 정규화 방법 1 ###

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
32
33
34
35
36
### 정규화 ###
# 방법 1 #
# 각 열의 데이터 값을 각 열의 최대값으로 나누는 방법 #
 
df.horsepower_normal1 = df.horsepower / abs(df.horsepower.max())
# horesepower 열의 원소를 그 열의 최대값의 절대값으로 나눈다.
 
print(df.horsepower)
'''
0      130.0
1      165.0
2      150.0
3      150.0
4      140.0
       ...
393     86.0
394     52.0
395     84.0
396     79.0
'''
 
print(df.horsepower_normal1)
'''
[392 rows x 3 columns]
0      0.565217
1      0.717391
2      0.652174
3      0.652174
4      0.608696
         ...
393    0.373913
394    0.226087
395    0.365217
396    0.343478
397    0.356522
'''
cs

 

 

### 정규화 방법 2 ###

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
# 방법 2 #
# 각 열의 최대값에서 최소값을 뺀 것을 분모로 두고 
# 각 열의 데이터(원소)에서 각 열의 최소값을 뺀 것을 분자로 둬서
# 0~1 사이의 값을 얻는다. (정규화)
 
min_x = df.horsepower - df.horsepower.min()
# 열의 최소값으로 열의 원소를 뺌 -> 분자
 
min_max = df.horsepower.max() - df.horsepower.min()
# 열의 최대값에서 열의 최소값을 뺌 -> 분모
 
df.horsepower_normal2 = min_x / min_max
print(df.horsepower_normal2)
'''
  df.horsepower_normal2 = min_x / min_max
0      0.456522
1      0.646739
2      0.565217
3      0.565217
4      0.510870
         ...
393    0.217391
394    0.032609
395    0.206522
396    0.179348
397    0.195652
'''
cs
반응형