본문 바로가기

Theory/DataScience

Python scikit learn의 Label Encoder와 MinMax, Standard, Robust Scaler 이해하기

얼핏 관계가 없어 보일 수도 있으나, 이번에는 scikit learn의 Label Encoder와 MinMax, Standard, Robust Scaler를 이야기 해보려고 합니다. 이 아이들 모두 데이터를 만지작 거리다 보면 자주 만나게 되는 아이들입니다.

Label Encoder

먼저 연습용 데이터를 즉석에서 만들어 보죠.

그냥 A 컬럼은 문자로, B 컬럼은 흔히 보는 숫자로 되어 있습니다.

네 위와 같이 만들어 지죠. 만약 A컬럼의 문자 a, b, c를 각각 번호 0, 1, 2를 매겨서 변환하고 싶다면 LabelEncoder를 사용하면 됩니다.

먼저 LabelEncoder를 불러와서 A컬럼을 기준으로 fit을 시키면, 어떤 아이를 0이라고 할지, 또 어떤아이를 1이라고 할지를 정합니다.

그 내용이 궁금하면 classess_를 호출하면 해당 문자가 나타나고, 그 순서대로, 0, 1, 2가 됩니다.

이제 transform 명령을 이용하면 fit에서 정해진 규칙대로 변환이 됩니다. 변환이 된것을 le_A라는 컬럼에 저장해서 보면 저렇게 되죠.

변환하고 싶으면 transform이라는 명령을 사용하면 됩니다.

방금 했던, fit과 transform을 한 번에 수행하는 fit_transform도 있습니다.

역으로 숫자를 fit한 규칙에 맞춰 원래의 문자로 변환하는 것은 inverse_transform입니다.

Min-Max Scaler

Scaler는 여러 컬럼은 일정한 범위로 옮겨놓는 것입니다. Min Max Scaler는 각 컬럼의 최대를 1로, 최소를 0으로 바꾸는 작업을 의미합니다.

x에 min값을 빼는 것이 분자에 있으므로, 분자는 x가 min일때 0을 가지게 되고, 분모에는 max - min의 값이어서 max부터 min까지의 길이가 1이된다고 생각할 수 있습니다.

위 코드처럼 df를 준비하고,

min-max scaler를 준비합니다. df를 기준으로 fit 명령까지 수행했으므로, 각 컬럼별로 max값과 min값을 찾게 됩니다.

그 결과는 위 코드처럼 저장됩니다. 각 컬럼의 최대 최소를 모두 잘 찾았습니다.

이제 df를 transform을 시키면 이런 결과를 얻을 수 있습니다.

다시 inverse_transform을 시키면 원래대로 복원되겠죠.

이 과정을 합쳐서 fit_transform을 사용할 수도 있습니다.

Standard Scaler

Standard Scaler를 표준 정규화로, 평균을 0으로 표준편차를 1로 변환하는 것입니다.

아까 min-max scaler때 만들어 둔 df를 사용하겠습니다.

Standard Scaler를 불러서, df를 기준으로 fit을 하면,

각 컬럼별로 평균과 표준편차를 계산하게 됩니다.

이를 이용해서 df를 trasform을 시키면

위와 같은 결과가 나타납니다.

물론 fit_transform도 가능하구요.

다시 inverse_transform을 시키면 원복되기도 합니다.

Robust Scaler

이제 Robust Scaler를 이야기하려고 하는데요. 그전에 box plot에 대해 다시 개념을 하나 확인하죠.

box 플랏에서 IQR이 데이터의 25%지점부터 75%지점을 이야기합니다. 그것을 각각 Q1, Q3라고 하고, 중간값(median)을 Q2라고 합니다.

Robust Scaler를 Q2를 0으로 잡고, Q3와 Q1의 길이 즉, IQR을 1로 변환하는 것입니다.

다시 데이터 하나를 만들고~

비교를 위해 이번에는 Min Max, Standard, Robust를 모두 불러옵니다.

각각 적용해서 컬럼을 만듭니다.

이게 그 모습이구요.

그걸 boxplot으로 그려봅니다.

원 데이터 A에 대해 MinMax와 Standard, Robust 모두 특성이 잘 보입니다.

반응형