인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

doctorsong8309's profile image
doctorsong8309

asked

[Revised Edition] The Complete Guide to Python Machine Learning

Pandas Overview and Basic API - 01

oof 질문 드립니다

Resolved

Written on

·

994

0

oof (out of fold)가 무엇을 뜻하는지 잘 모르겠습니다

p.s  oof 가 밑에 있는 그림과 같이 Learn + Predict 부분을 합친 부분을 말하는 건가요?

정확히 잘 모르겠어서 질문 드립니다. 

머신러닝 배워볼래요? python통계

Answer 2

0

doctorsong8309님의 프로필 이미지
doctorsong8309
Questioner

그렇군요 답변 감사합니다 ^^

0

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

안녕하십니까,

OOF Prediction은 일반적으로 Cross validation기반의 Prediction을 지칭하는데 대략 2가지 유형이 있습니다. 

1. 첫번째는 강의의 4장 Stacking과 같은 유형입니다. 위에서 질문하신 그림이 Stacking에서 학습 데이터를 만드는 그림입니다. 

위 그림은 5 Fold 기반으로 개별 모델이 5회 번갈아 가면 4/5 학습 데이터로 학습하고, 1/5 학습 데이터로 예측하여 별도의 학습 데이터를 만듭니다. 그리고 이렇게 만들어진 학습 데이터를 다시 메타 모델이(아마도 Model 6) 학습하여 최종 예측 하는 방식입니다. 

2.   K-Fold로 학습을 수행 한 뒤 예측을  테스트 데이터에 K번 만큼 수행한 뒤 개별 예측값을 평균하여 최종 예측합니다(오버피팅을 최대한 회피하려는 나름의 방법입니다)

가령 5 Fold라고 하면 개별 모델이 5회 번갈아 가면서 4/5 학습 데이터로 학습합니다. 이렇게 학습된 모델을 이용하여 테스트 데이터로 예측을 수행하되 5번 Iteration하면서 학습 데이터를 변경하면서 학습하고 테스트 데이터로 예측값을 평균하여 최종 예측합니다.

아래는 위에서 말씀드린 부분을 Pseudo 코드로 작성한 것입니다.  맨 아래에 predictions += 가 된 이유는 evaluation이 ROC-AUC 이기 때문에 개별 예측값을 n_splits으로 나눈 후에 합치는 방식으로 계산 된 것입니다. 

num_folds = 11
folds = StratifiedKFold(n_splits=num_folds, shuffle=False, random_state=2319)
for fold_, (trn_idx, val_idx) in enumerate(folds.split(train.values, target.values)):
    trn_data = lgb.Dataset(train.iloc[trn_idx][fea], label=target.iloc[trn_idx])
    val_data = lgb.Dataset(train.iloc[val_idx][feat], label=target.iloc[val_idx])
    clf = lgb.train(param, trn_data, 1000, valid_sets = [trn_data, val_data])
    oof[val_idx] = clf.predict(train.iloc[val_idx][feat], num_iteration=clf.best_iteration)
    predictions += clf.predict(test[feat], num_iteration=clf.best_iteration) / folds.n_splits
doctorsong8309's profile image
doctorsong8309

asked

Ask a question