더북(TheBook)

원-핫 인코딩된 데이터셋을 사용할 때 다중 공선성(multicollinearity) 문제를 유념하세요. 어떤 알고리즘에는 이슈가 될 수 있습니다(예를 들어 역행렬을 구해야 하는 경우). 특성 간의 상관관계가 높으면 역행렬을 계산하기 어려워 수치적으로 불안정해집니다. 변수 간의 상관관계를 감소하려면 원-핫 인코딩된 배열에서 특성 열 하나를 삭제합니다. 이렇게 특성을 삭제해도 잃는 정보는 없습니다. 예를 들어 color_blue 열을 삭제해도 샘플이 color_green = 0이고 color_red = 0일 때 blue임을 알 수 있습니다.10

get_dummies를 사용할 때 drop_first 매개변수를 True로 지정하여 첫 번째 열을 삭제할 수 있습니다. 다음 예를 참고하세요.

>>> pd.get_dummies(df[['price', 'color', 'size']],
...                drop_first=True)
   price  size  color_green  color_red
0   10.1     1            1          0
1   13.5     2            0          1
2   15.3     3            0          0

OneHotEncoder에서 중복된 열을 삭제하려면 다음과 같이 drop='first'categories='auto'로 지정해야 합니다.11

>>> color_ohe = OneHotEncoder(categories='auto', drop='first')
>>> c_transf = ColumnTransformer([
...            ('onehot', color_ohe, [0]),
...            ('nothing', 'passthrough', [1, 2])
... ])
>>> c_transf.fit_transform(X)
array([[1.0, 0.0, 1, 10.1],
       [0.0, 1.0, 2, 13.5],
       [0.0, 0.0, 3, 15.3]], dtype=object)

 

 


10 역주 한 열이 다른 열에 의존적이거나 열 값이 모두 0인 경우를 열 랭크 부족(column rank deficient)이라고 합니다. 사이킷런이 사용하는 LAPACK 라이브러리는 이런 경우를 허용하므로 랭크 부족을 신경 쓰지 않아도 됩니다.

11 역주 drop='first'로 설정하면 인코딩된 특성 중 첫 번째 열을 삭제합니다. drop='if_binary'로 설정하면 두 개의 범주를 가진 특성일 경우에만 인코딩된 첫 번째 열을 삭제합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.