[ML] 머신러닝 모델 검증을 위한 레코드 분할
2025. 5. 7. 23:16ㆍML
오늘 배운 내용을 복습할 겸, 머신러닝 모델 검증을 위한 레코드 분할에 대해서 다뤄 보려고 한다.
학습용과 검증용 데이터 나누기
데이터 분할은 예측 모델을 평가할 때 필요한 전처리이다.
학습 데이터와 검증 데이터는 같은 전처리를 적용해야 하며(스케일링, 결측치 처리 등), 되도록 같은 데이터로 묶어서 다루고,
예측 모델에 입력하기 직전 분할하는 것이 적절하다.
적용 데이터는 정답을 알 수 없는 상태에서 사용하는 데이터이다. 그러므로 흐름이나 수집 시점이 다르기 때문에, 분할할 필요가 없다.
쉽게 말해서, 어차피 "평가용" 데이터가 아니고, 실제로 사용 되는 "운영용" 데이터니까 분할할 필요가 없다.
위 이미지와 같이 교차 검증은 데이터를 검증용 데이터 / 학습용 데이터로 구분한다.
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
train_data, test_data, train_target, test_target = \
train_test_split(production_tb.drop('fault_flg', axis=1),
production_tb[['fault_flg']],
test_size=0.2)
train_data.reset_index(inplace=True, drop=True)
test_data.reset_index(inplace=True, drop=True)
train_target.reset_index(inplace=True, drop=True)
test_target.reset_index(inplace=True, drop=True)
print(train_data)
print(train_target)
모델 학습시, 정답이 없어야 하므로 fault_flg 컬럼을 drop 해주고, 테스트 데이터는 20%로 잡아주었다.
<결과>
type length thickness
0 E 226.187113 21.029733
1 B 133.814427 14.083716
2 B 200.142637 2.917706
3 D 142.887310 16.560487
4 E 289.162995 30.476145
.. ... ... ...
795 C 212.354175 38.857996
796 D 223.806149 19.650766
797 A 198.988129 31.631090
798 E 162.463041 20.752650
799 B 124.966171 8.337629
[800 rows x 3 columns]
fault_flg
0 False
1 False
2 False
3 False
4 False
.. ...
795 True
796 False
797 False
798 False
799 False
[800 rows x 1 columns]
여기까지 잘 되었다면, 교차 검증을 위해 분할을 해줄 차례이다.
row_no_list = list(range(len(train_target)))
# 교차 검증을 위한 분할
k_fold = KFold(n_splits=4, shuffle=True)
for train_cv_no, test_cv_no in k_fold.split(row_no_list) :
train_cv = train_data.iloc[train_cv_no, :]
print(train_cv)
test_cv = train_data.iloc[test_cv_no, :]
<결과>
type length thickness
0 E 226.187113 21.029733
1 B 133.814427 14.083716
2 B 200.142637 2.917706
3 D 142.887310 16.560487
5 A 81.478578 8.840798
.. ... ... ...
795 C 212.354175 38.857996
796 D 223.806149 19.650766
797 A 198.988129 31.631090
798 E 162.463041 20.752650
799 B 124.966171 8.337629
[600 rows x 3 columns]
type length thickness
2 B 200.142637 2.917706
3 D 142.887310 16.560487
4 E 289.162995 30.476145
6 A 135.440179 14.673518
8 E 157.480341 31.257903
.. ... ... ...
794 E 142.888025 2.229418
796 D 223.806149 19.650766
797 A 198.988129 31.631090
798 E 162.463041 20.752650
...
795 C 212.354175 38.857996
796 D 223.806149 19.650766
[600 rows x 3 columns]
'ML' 카테고리의 다른 글
[ML] Linear Regression 정리 (0) | 2025.05.27 |
---|---|
[ML] Azure 클라우드 기반 머신러닝 실습 - 다중 선형 회귀 (0) | 2025.05.16 |