분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
Python 튜토리얼
Lv3 모델링 4/4 python 파이썬 교차검증 실습
이번 시간에는 교차검증 실습을 진행하겠습니다.
지난 시간에는 교차 검증의 정의와, 반복문으로 train-valid로 나누는 방법을 알아보았습니다.
이번 시간에는 그 실습을 진행하겠습니다.
이번 시간의 내용을 위의 이미지와 함께 정리하면 다음과 같습니다.
코드로 가시죠.
--------------------------------------------------------------------------------------------------------------------------
# "X"라는 변수에 train의 "index"와 "quality"를 제외하고 지정해 주세요
# "y"라는 변수에는 "quality"를 지정해 주세요
X = train.drop(columns = ['index','quality'])
y = train['quality']
# "kf"라는 변수에 KFold를 지정해 줍시다.
# n_splits는 5, shuffle은 True, random_state는 0으로 설정해주세요
kf = KFold(n_splits = 5, shuffle = True, random_state = 0)
# "model"이라는 변수에 RandomForestClassifier를 지정해 줍시다.
# valid_scores라는 빈 리스트를 하나 만들어줍시다.
# test_predictions라는 빈 리스트를 하나 만들어 줍시다.
model = RandomForestClassifier(random_state = 0)
valid_scores = []
test_predictions = []
# 지난 시간에 다루었던 kf.split()을 활용해, 반복문으로 X_tr, y_tr, X_val, y_val을 설정해봅시다.
for train_idx, valid_idx in kf.split(X,y) :
X_tr = X.iloc[train_idx]
y_tr = y.iloc[train_idx]
X_val = X.iloc[valid_idx]
y_val = y.iloc[valid_idx]
# 앞의 문제에 이어서 반복문 속에서 model.fit(X_tr, y_tr)을 활용해 모델을 학습해봅시다
for train_idx, valid_idx in kf.split(X,y) :
X_tr = X.iloc[train_idx]
y_tr = y.iloc[train_idx]
X_val = X.iloc[valid_idx]
y_val = y.iloc[valid_idx]
model.fit(X_tr, y_tr)
# 앞의 문제에 이어서 반복문 속에서 "valid_prediction"이라는 변수에 model.predict(X_val)의 결과를 저장해 봅시다.
for train_idx, valid_idx in kf.split(X,y) :
X_tr = X.iloc[train_idx]
y_tr = y.iloc[train_idx]
X_val = X.iloc[valid_idx]
y_val = y.iloc[valid_idx]
model.fit(X_tr, y_tr)
valid_prediction = model.predict(X_val)
# 앞의 문제에 이어서 반복문 속에서 accuracy_score를 이용해, 모델이 어느정도의 예측 성능이 나올지 확인해봅시다.
# 그리고 "valid_prediction"의 점수를 scores에 저장 해봅시다.
# 반복문에서 빠져나온 후에 np.mean()을 활용해 평균 점수를 예측해봅시다.
for train_idx, valid_idx in kf.split(X,y) :
X_tr = X.iloc[train_idx]
y_tr = y.iloc[train_idx]
X_val = X.iloc[valid_idx]
y_val = y.iloc[valid_idx]
model.fit(X_tr, y_tr)
valid_prediction = model.predict(X_val)
score = accuracy_score(y_val, valid_prediction)
valid_scores.append(score)
print(score)
print('평균 점수 : ', np.mean(valid_scores))
# 이제 어느정도의 성능이 나올지 알게 되었으니, 반복문 속에서 test를 예측해 "test_prediction"이라는 변수에 지정해봅시다.
# test_prediction을 지정했다면, "test_precitions"라는 빈 리스트에 넣어줍시다.
for train_idx, valid_idx in kf.split(X,y) :
X_tr = X.iloc[train_idx]
y_tr = y.iloc[train_idx]
X_val = X.iloc[valid_idx]
y_val = y.iloc[valid_idx]
model.fit(X_tr, y_tr)
test_prediction = model.predict(test.drop(columns = ['index']))
test_predictions.append(test_prediction)
# 이제 결과 값을 만들어 보겠습니다.
# "test_precitions"를 Data Frame으로 만들어주세요
test_predictions = pd.DataFrame(test_predictions)
# DF.mode()를 활용해 열별 최빈값을 확인하고, "test_prediction"이라는 변수에 지정해봅시다.
# "test_prediction"의 첫 행을 최종 결과값으로 사용합시다.
test_prediction = test_predictions.mode()
test_prediction = test_predictions.values[0]
# data의 sample_submission 파일을 불러와 "quality"라는 변수에 "test_precition"을 저장해줍시다.
# 그 이후에는, "data/submission_KFOLD.csv"에 저장하고, 제출해봅시다.
sample_submission = pd.read_csv('data/sample_submission.csv')
sample_submission['quality'] = test_prediction
sample_submission.to_csv('data/submission_KFOLD.csv', index=False)
--------------------------------------------------------------------------------------------------------------------------
↩️ 오늘의 파이썬 리스트
#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선 #데이터분석 #데이터사이언티스트 #코랩 #Python #colab #kaggle #pandas #numpy #sckit-learn # read_csv
done
✅
# "test_prediction"의 첫 행을 최종 결과값으로 사용합시다.
test_prediction = test_predictions.mode()
test_prediction = test_predictions.values[0]
이 부분에서 아래 부분이 test_prediction.values[0]이 되어야 하지 않나요?
설명에 나온 대로 변수를 바꿨더니 정확도가 올랐습니다. 0.675 - > 0.694
맞네요 s를 붙이면 5개의 모델 중 1번째 모델이 예측한 결과만 반환하는 것과 같아서 교차검증을 하는 의미가 사라집니다.
앞에서도 중요하게 틀리는 포인트들이 종종 있는데 이정도면 긴장감을 주려고 일부러 해두신 느낌..
그냥 지나칠뻔 했는데 맞네요...
✅
✅
✅
✅
done
✅
✅
✅
✅
✅
✅
done
done
✅
done
✅
✅
✅
✅
✅
✅
✅
✅
done
done
✅
done!
kfold도 앙상블의 종류라고 볼수 있나요?
제가 이해한 바로는 Kfold는 검증법입니다.
K-fold는 검증 방법 중의 하나입니다.
가장 무난한 방법은 학습 데이터에서 일부를 검증 데이터로 분할해서 테스트 데이터와 같이 모델 학습에도 사용하지 않고, 실제 테스트 데이터의 환경과 동일하게 취급해서 분할한 검증 데이터로부터 모델 성능을 측정하는 방법이 있는데요,
이는 학습 데이터 중 일부를 분할하고 검증에만 사용하기 때문에 학습 데이터의 손실이 따른다는 단점이 있습니다.
여러 이유가 있겠지만, 위와 같은 이유로도 k-fold 검증을 많이 사용하기도 합니다.
왜냐하면 결국 k-fold 검증을 사용하면 k개의 학습된 모델을 얻을 수 있는데, 이 k개의 모델들을 앙상블을 하면 전체 학습 데이터셋을 사용한 것과 같기 때문입니다.
때문에 k-fold 검증 이후 필연적으로 앙상블을 해야 한다고 생각이 들 수도 있고, 질문 주신 것과 같이 k-fold가 앙상블 종류 중에 하나인가? 라는 생각이 들 수도 있겠지만, 본질적으로 k-fold는 검증 방법의 하나입니다.
감사합니다. 저는 이해가 되었습니다.
앙상블 공부하고있었는데 비슷한거같아서 질문했던거였는데 두분다 정말 감사합니다!
✅
done+
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
done