데이터 전처리에서 정규화(Normalization)는 서로 다른 범위의 값들을 일정한 표준 범위로 변환하는 과정을 의미합니다. 예를 들어 -1부터 +1 사이, 또는 0부터 1 사이의 값으로 변환할 수 있으며, 뺄셈과 나눗셈 연산을 통해서도 정규화가 가능합니다.
그중 L2 정규화는 '최소 제곱법(Least Squares)'이라고도 불리며, 데이터의 각 행(row)에 대해 값들을 제곱한 후 그 합이 항상 1이 되도록 데이터를 조정하는 방식입니다.
이제 파이썬의 Scikit-learn 라이브러리를 사용하여 L2 정규화를 실제로 구현하는 방법을 살펴보겠습니다.
예제 코드
import numpy as np
from sklearn import preprocessing
input_data = np.array(
[[34.78, 31.9, -65.5],
[-16.5, 2.45, -83.5],
[0.5, -87.98, 45.62],
[5.9, 2.38, -55.82]]
)
normalized_data_l2 = preprocessing.normalize(input_data, norm='l2')
print("\nL2 normalized data is \n", normalized_data_l2)
실행 결과
L2 normalized data is
[[ 0.43081298 0.39513899 -0.81133554]
[-0.19377596 0.02877279 -0.98062378]
[ 0.00504512 -0.88774018 0.4603172 ]
[ 0.10501701 0.04236279 -0.99356772]]
코드 설명
필요한 패키지인 NumPy와 Scikit-learn의 preprocessing 모듈을 임포트합니다.
NumPy 라이브러리를 사용하여 입력 데이터 배열을 생성합니다.
'preprocessing' 클래스 내의 'normalize' 함수를 호출하여 데이터를 정규화하며, 이 함수는 각 행의 값들을 제곱한 합이 1이 되도록 변환해 줍니다.
매개변수 norm에 'l2'를 지정하여 L2 방식의 정규화임을 명시합니다.
이렇게 하면 배열 내 모든 데이터가 정규화되며, 각 행의 제곱합은 반드시 1이 됩니다.
마지막으로 정규화된 데이터가 콘솔에 출력됩니다.
L2 정규화의 활용
L2 정규화는 머신러닝에서 특히 유용합니다. 특성(feature)들의 스케일이 크게 다를 경우 모델 학습이 왜곡될 수 있는데, L2 정규화를 적용하면 각 샘플을 단위 벡터(unit vector)로 변환하여 유클리드 거리 기반 알고리즘이나 신경망 학습의 안정성을 높일 수 있습니다.