-
Scaling - MinMaxScaler머신러닝/FAQ 2022. 9. 1. 06:34
이번 포스팅에서는 자주 문의가 들어오는 scaling에 대해 알아보고자 한다.
MinMaxScaler는 모든 value를 0~1 (0:min , 1:max)로 변환하여 scaling이 상대적으로 큰 feature에 의해
나머지 feature가 무시되는 bias한 상황을 방지하기 위한 전처리방법 중 하나이다.
일반적으로 데이터의 분포도가 한쪽으로 쏠려있는 경우에도 종종 사용한다.
1개의 feature(columns)에 대해서만 scaling 하는 경우
train["Columns_A"] ### train데이터가 있다고 가정하고 Columns_A 컬럼을 MinMax Scaling 해보자 from sklearn.preprocessing import MinMaxScaler ### 스케일러를 불러온다 scaler = MinMaxScaler() scaler.fit(train["Columns_A"]) ## 컬럼 1개의 경우엔 바로 scaling 하면 shape가 1차원이라서 에러가 발생한다. 따라서 이럴땐 차원을 추가해준다. ## 차원 변경 방법 1 train_cols = train["Columns_A"] train_cols.reshape(-1, 1) ### 2차원으로 변경 (reshape을 활용) ## 차원 변경 방법 2 train_cols = pd.DataFrame(train["Columns_A"]) ## 데이터프레임으로 덮어씌우면 2차원이 된다. ## 차원 변경 후 scaler.fit(train_cols) result = scaler.transform(train_cols) train["Columns_A_scaled"] = result ### 스케일된 결과를 신규 컬럼을 만들어 추가한다. 원본을 덮어씌우는건 비추천 result = scaler.fit_transform(train_cols) ### 이렇게 한줄로도 가능하다.
주의할 것은 항상 train데이터를 스케일링 해주면 test데이터도 해주어야한다.
fit_transform을 train데이터로 하게되면 test데이터는 transform만 해주도록 하자
(항상 기준은 train데이터로 삼아서 scaling해야 같은 수준의 값으로 스케일링된다. 왜냐하면 train , test 데이터의 min값과 max값이 다를테니까)
2개 이상의 컬럼을 scaling 하는 경우
(더 간단함)train[["Columns_A" , "Columns_B"]] ### train데이터가 있다고 가정하고 Columns_A ,B 컬럼을 MinMax Scaling 해보자 ### 잊지말자 두개이상의 컬럼은 리스트로 한번 묶은 다음에 데이터프레임에서 슬라이싱 해야해서 대괄호가 2개다. from sklearn.preprocessing import MinMaxScaler ### 스케일러를 불러온다 scaler = MinMaxScaler() scaler.fit(train[["Columns_A" , "Columns_B"]]) ## 컬럼 2개면 2차원이라서 추가적인 차원 변경 불요 result = scaler.transform(train[["Columns_A" , "Columns_B"]]) ### 마지막에 result 값이 2차원으로 들어오기때문에 dataframe으로 변경해주어야한다. train_scaled = pd.DataFrame(result , columns = ["Colums_A_Scaled" , "Columns_B_Scaled"]) ## 컬럼 이름을 적당히 지정해주고 , train_total = pd.concat([train , train_scaled] , axis = 1) ## 기존 train 원본데이터와 concat해서 합친후 활용하는것을 추천한다.
'머신러닝 > FAQ' 카테고리의 다른 글
평가 산식 (metrics) , 데이터 타입에 대한 대응 (0) 2023.04.13 PCA를 활용한 차원 축소 방법 (1) 2023.04.13 데이콘 관련 Tip(High scoring) (0) 2022.09.01 Feature Importance를 활용한 피쳐 엔지니어링 (0) 2022.09.01 데이콘 관련 FAQ & Tip (0) 2022.08.25