#오늘의 파이썬 #1일1오파 #파이썬 # python

매일 오전10시 업로드, Dacon Daily Python Camp. 1일1오파 격파하기!

  • moneyIcon Prize : 교육
  • 9,999Team D-101353

 

Lv3 모델링 4/4 python 파이썬 교차검증 실습

2021.07.29 11:57 1,527 Views

이번 시간에는 교차검증 실습을 진행하겠습니다.


지난 시간에는 교차 검증의 정의와, 반복문으로 train-valid로 나누는 방법을 알아보았습니다.

이번 시간에는 그 실습을 진행하겠습니다.


이번 시간의 내용을 위의 이미지와 함께 정리하면 다음과 같습니다.


  1. K-Fold를 이용해서 Train과 Valid Data를 나눈다.
  2. Model을 이용해서 train 데이터를 학습한다.
  3. Model을 이용해서 valid 데이터를 예측해 성능을 확인한다.
  4. Model을 이용해서 test 데이터를 예측한다.
  5. n_splits를 5로 설정한다면, 5개의 결과값들에 대한 “최빈값”을 이용해 가장 등장할 가능성이 높은 결과값으로 결정한다.
  6. 결과를 제출한다.


코드로 가시죠.

--------------------------------------------------------------------------------------------------------------------------

# "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)

--------------------------------------------------------------------------------------------------------------------------



[Colab 실습 링크]


↩️ 오늘의 파이썬 리스트

#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선  #데이터분석 #데이터사이언티스트 #코랩 #Python  #colab #kaggle #pandas #numpy #sckit-learn # read_csv



그린티
2021.09.08 20:48

done

세라자데
2021.09.09 14:57

done

DSJY
2021.09.13 18:05

phu
2021.09.14 21:55

# "test_prediction"의 첫 행을 최종 결과값으로 사용합시다.
test_prediction = test_predictions.mode()
test_prediction = test_predictions.values[0]

이 부분에서 아래 부분이 test_prediction.values[0]이 되어야 하지 않나요?
설명에 나온 대로 변수를 바꿨더니 정확도가 올랐습니다. 0.675 - > 0.694

매미인턴
2021.09.16 09:32

다욤
2021.09.19 14:54

찬찬이
2021.09.25 12:02

Holte
2021.09.30 21:19

changhyeon
2021.10.09 18:05

done

왼쪽눈썹왁싱
2021.10.31 10:27

yulia.
2021.12.04 18:31

sotanfdl
2021.12.21 21:28

moran
2021.12.27 17:39

하잉바
2021.12.27 20:11

hijihyo
2022.01.23 16:23

호랭이띠
2022.01.29 19:34

done

하랴랴
2022.03.02 17:14

done

ChimChim
2022.03.07 03:37

acebed
2022.03.10 18:00

done

kimgugu
2022.03.27 11:21

비회원
2022.04.05 21:24

Kdata
2022.04.19 10:17

khloee
2022.05.26 15:23

로그인이 필요합니다
0 / 1000