Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 scikit-learn으로 L2 정규화(L2 Normalization) 구현하는 방법

데이터 전처리에서 정규화(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)로 변환하여 유클리드 거리 기반 알고리즘이나 신경망 학습의 안정성을 높일 수 있습니다.