앎을 경계하기

DAFIT/906 - 머신러닝으로 당뇨병 예측

<DAFIT> 06 머신러닝을 통한 당뇨병 예측 - 04 데이터 분할

양갱맨 2019. 11. 24. 22:11

 

 

이번 문제는 본격적으로 데이터 셋을 만드는 문제이다.

학습데이터셋, 검증데이터셋, 테스트데이터셋으로 나누면 되는 문제.

사실 train validation test ratio만 검색해도 어떤 비율로 데이터를 나눠야하는 지 많이 나온다.

주로 train/test만 사용할때는 70/30 비율로 사용하고

train/validation/test는 60/20/20으로 사용한다.

scikit-learn에서 제공하는 메소드를 사용하면 쉽게 데이터셋을 분리할 수 있다.

train_test_split(x,y,test_size=0.25,random_state=1)

이런식으로 사용하면 된다.

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

 

sklearn.model_selection.train_test_split — scikit-learn 0.21.3 documentation

Parameters: *arrays : sequence of indexables with same length / shape[0] Allowed inputs are lists, numpy arrays, scipy-sparse matrices or pandas dataframes. test_size : float, int or None, optional (default=None) If float, should be between 0.0 and 1.0 and

scikit-learn.org

 

이전 포스팅에서 설명했던 코드는 넘어가도록 한다.

import pandas as pd
from sklearn.model_selection import train_test_split

data = pd.read_csv("/content/drive/My Drive/다핏문제/906/dataset_37_diabetes.csv")
#결측치 처리
#plas, pres, mass의 0값 median으로 대체

preszero_data = data.replace({'pres':0},{'pres':None})
preszero1_data = preszero_data.dropna()
preszero_data = data.replace({'pres':0},{'pres':None})
preszero_data = preszero_data.fillna(preszero1_data.pres.median())

masszero_data = preszero_data.replace({'mass':0.0},{'mass':None})
masszero1_data = masszero_data.dropna()
masszero_data = masszero_data.fillna(masszero1_data.mass.median())

plaszero_data = masszero_data.replace({'plas':0},{'plas':None})
plaszero1_data = plaszero_data.dropna()
edit_data = plaszero_data.fillna(plaszero1_data.plas.median())

 결측치를 처리하고 난 데이터셋의 feature는 다음과 같다.

우리의 학습데이터의 정답이 될 'class' feature가 함께 있기 때문에 이것을 분리해주도록한다.

#데이터에서 정답 클래스 분리하기
col = list(map(str,edit_data.columns))
x = edit_data[col[:-1]]
print(x)
y = edit_data[col[-1]]
print(y)

# edit_data를 train/validation/test set으로 나누기
# 전체 데이터에서 학습데이터셋과 테스트셋을 나눈다.
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.4)

#train set에서 train과 validation set을 나눈다.
x_test,x_val,y_test,y_val = train_test_split(x_test,y_test,test_size=0.5)

print(x_train.shape)
print(x_val.shape)
print(x_test.shape)

사실 딱히 코드에 대해서 설명할 것은 없는 것같다.

처음에 train, test로 60/40 나눠주고 40%의 test셋에서 다시 test와 val로 나눠주었다.

 

train = 768개 중 60% = 460

val = 308개 중 50% = 154

test = 308개 중 50% = 154

잘 나눠진것을 확인할 수 있다.

 

 

 

http://www.dafit.me/question/?q=YToxOntzOjEyOiJrZXl3b3JkX3R5cGUiO3M6MzoiYWxsIjt9&bmode=view&idx=2682894&t=board

 

[DF906] 머신러닝을 통한 당뇨병 예측 : 다핏, 데이터사이언스 연습문제

🔥 문제 설명당뇨병에 영향을 주는 8가지 특징을 바탕으로, 머신러닝 기법을 통해 당뇨병을 예측해보는 문제입니다. 🔥 추천 대상머신러닝에 많이 활용되는 SciKit-Learn을 활용하여 머신러닝 입문을 해보고 싶은 자.캐글의 타이타닉 생존자 예측 문제 수준을, 새로운 문제로 스스로 해결해보고 싶은 자.이진 분류데이터(True / False)를 활용하여 기초적인 데이터 분석과 머신러닝 기법을 체험해보고 싶은 사람.🔥 학습 목표머신러닝의 세부적인 모델링 또는

www.dafit.me