inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

캐글 Advanced 머신러닝 실전 박치기

캐글데이터에서 스케일링 및 라벨인코딩(pd.factorize) 문의

해결된 질문

461

김성민

작성한 질문수 9

0

안녕하세요 강사님!

강의 잘 듣고 있습니다.

캐글에 참여하고있는데, 스케일링 및 라벨인코딩(pd.factorize) 에서 막혀서 질문 드립니다.

 

1. 스케일링 관련 문의

데이터 전처리시, Standard Scaling을 한다 가정하였을 때,

'파이썬 머신러닝 완벽 가이드' 나 기타 다른 자료를 찾아봐도, train_split 후 

X_train, X_test 데이터에 대해서 스케일링을합니다.

저희 데이터에서는 아래와 같은경우에,

마지막 TARGET이 없는 테스트 데이터 셋에 어떻게 스케일링 해야하는지 궁금합니다.

(제 생각엔 train_split 하기 전, apps_all 을 스케일링 하면 될 것같은데, 방법을 모르겠습니다)

 

object_columns = apps_all.dtypes[apps_all.dtypes == 'object'].index.tolist()

for column in object_columns:

    apps_all[column] = pd.factorize(apps_all[column])[0]

 

apps_all_train = apps_all[~apps_all['TARGET'].isnull()]

apps_all_test = apps_all[apps_all['TARGET'].isnull()]

apps_all_test = apps_all_test.drop('TARGET', axis=1)

 

from sklearn.model_selection import train_test_split

ftr_app = apps_all_train.drop(['SK_ID_CURR', 'TARGET'], axis=1)

target_app = apps_all_train['TARGET']

 

train_x, valid_x, train_y, valid_y = train_test_split(ftr_app, target_app, test_size=0.3, random_state=2020)

 

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

scaler.fit(train_x)

train_x = scaler.transform(train_x)

valid_x = scaler.transform(valid_x)

 

이렇게 하면 정말 제출해야하는 마지막 데이터(apps_all_test) 데이터에 대해서는 어떻게 스케일링을 해야하나요?

 

2. 위 코드에서  pd.factorize 를 하게되면 object 칼럼들이 int형 컬럼으로 바뀌게 되는데,

      이 이후 스케일링을 하게되면, 라벨인코더 결과값들마저 스케일링 됩니다.

      이는 뭔가 잘못됐다는 생각이 듭니다.

      혹시 숫자형컬럼(int or float) 들에 대해 스케일링을 먼저하고, object 칼럼들에 대해 라벨인코딩을 해야하나요?

 

감사합니다.

 

라벨인코딩 머신러닝 배워볼래요? 스케일링 kaggle

답변 1

0

권 철민

안녕하십니까, 

1. 가장 쉽게 적용할 수 있는 방법은 train과 test를 모두 합한  apps_all 에 scaling을 일괄적으로 적용하는 것입니다. 

 ftr_apps_all = apps_all.drop(['SK_ID_CURR', 'TARGET'], axis=1)

target_apps_all = 

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

scaled_ftr_apps_all = scaler.fit_transform(ftr_apps_all)

scaled_ftr_apps_all['TARGET'] = apps_all['TARGET']

이후에 scaled_ftr_apps_all에 TARGET 값이 Null 여부에 따라서 train과 test를 분리하면 될 것 같습니다. 

2. 1번에서와 같이 먼저 scaling을 number 타입에만 적용한 후에 나중에 object type은 pd.factorize()를 적용하시면 될 것 같습니다. 

감사합니다. 

sql사용

0

46

2

좋은 강의 감사드립니다.

0

73

2

8분 40초경 LGBClassifier에서 설정해주신 파라미터들 관련 질문

0

246

2

사용 가능한 RAM을 모두 사용한 후 세션이 다운되었습니다

0

602

1

안녕하세요 선생님

0

229

1

권철민교수님 진심으로 감사드립니다.

0

319

1

안녕하세요 선생님

0

351

1

# credit_card_balance 데이터셋 피쳐엔지니어링

0

268

1

초거대 데이터셋을 Submission하려면?

0

190

1

Library 관련 질문

0

351

3

최적화 함수 에러

0

589

4

LightGBM Iteration관련

0

426

2

안녕하세요 교수님 vm 관련해서 질문이 있습니다.

0

204

1

코드를 실행했는데 오류가 발생합니다

0

1984

2

bayes_opt 회귀 모델에 적용하려면..

0

267

1

타겟값의 로그변환에 대해서

0

781

1

아나콘다 환경설정

0

460

1

깃허브 주소 문의드립니다.

0

360

1

손실함수에 대한 질문

0

345

1

card_bal 데이터셋 시각화 관련 질문입니다

0

232

1

LGBM null값 처리에 관해 질문있습니다

0

541

1

컬럼 관련 질문

0

281

1

히스토그램 x 값

0

365

1

n_iter 횟수 넘음 질문

0

492

2