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

Python scikit-learn으로 L1 정규화(L1 Normalization) 구현하는 방법

일정 범위의 값을 표준화된 값의 범위로 변환하는 과정을 정규화(Normalization)라고 합니다. 변환된 값은 -1에서 +1 사이 또는 0에서 1 사이가 될 수 있으며, 뺄셈과 나눗셈 연산을 통해서도 데이터를 정규화할 수 있습니다.

정규화가 필요한 이유

머신러닝 알고리즘에 입력되는 데이터는 일관성 있고 구조화된 형태를 유지해야 합니다. 모델이 값을 효과적으로 예측하려면 입력 데이터의 모든 특성(feature)이 동일한 스케일을 가져야 합니다. 하지만 현실 세계의 데이터는 구조화되어 있지 않고, 대부분 스케일이 서로 다릅니다.

바로 이때 정규화가 필요합니다. 정규화는 데이터 준비(data preparation) 과정 중 가장 중요한 단계 중 하나로, 입력 데이터셋의 각 열(column) 값들을 동일한 스케일로 조정하는 데 도움을 줍니다. 정규화 과정에서는 값들의 범위가 왜곡되지 않도록 보장됩니다.

참고: 머신러닝 알고리즘에 입력되는 모든 데이터셋을 반드시 정규화해야 하는 것은 아닙니다. 정규화는 데이터셋 내 특성들 간에 값의 스케일 차이가 클 때만 필요합니다.

정규화의 종류

  • Min-Max 정규화
  • Z 정규화 (Z-score 정규화)
  • 단위 벡터 정규화 (Unit Vector Normalization)

L1 정규화란?

L1 정규화는 최소 절대 편차(Least Absolute Deviations)라고도 불리며, 데이터를 변환하여 각 행(row)의 절댓값 합이 1이 되도록 만듭니다. 이는 각 요소를 해당 행의 절댓값 총합으로 나누는 방식으로 계산됩니다.

그럼 Python에서 scikit-learn 라이브러리를 사용해 L1 정규화를 구현하는 방법을 살펴보겠습니다.

예제 코드

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]]
)

data_normalized_l1 = preprocessing.normalize(input_data, norm='l1')
print("\nL1 normalized data is \n", data_normalized_l1)

실행 결과

L1 normalized data is
[[ 0.26312604  0.24133757 -0.49553639]
[-0.16105417  0.0239141  -0.81503172]
[ 0.00372856 -0.65607755  0.34019389]
[ 0.09204368  0.03712949 -0.87082683]]

코드 설명

  • 필요한 패키지(numpy, sklearn.preprocessing)를 임포트합니다.
  • Numpy 라이브러리를 사용하여 입력 데이터를 생성합니다.
  • 'preprocessing' 클래스에 포함된 'normalize' 함수를 사용하여 데이터를 정규화합니다.
  • 매개변수 norm='l1'을 지정하여 정규화 방식을 L1으로 설정합니다.
  • 이렇게 하면 배열 내 모든 데이터가 정규화되며, 각 행의 절댓값 합이 1이 됩니다.
  • 정규화된 데이터가 콘솔에 출력됩니다.

scikit-learn의 normalize 함수는 이처럼 한 줄의 코드로 L1 정규화를 손쉽게 적용할 수 있어, 전처리 파이프라인에서 매우 유용하게 활용됩니다.