validation set을 사용하는 이유는 간단합니다. 바로 "모델의 성능을 평가하기 위해서" 입니다. training을 한 후에 만들어진 모형이 잘 예측을 하는지 그 성능을 평가하기 위해서 사용합니다. training set의 일부를 모델의 성능을 평가하기 위해서 희생하는 것입니다. 하지만 이 희생을 감수하지 못할만큼 data set의 크기가 작다면 cross-validation이라는 방법을 쓰기도 합니다. cross-validation은 training set을 k-fold 방식을 통해 쪼개서 모든 데이터를 training과 validation 과정에 사용할 수 있게 합니다.
그러면 모델의 성능을 평가하면 뭐가 좋을까요? 첫 번째는 test accuracy를 가늠해볼 수 있다는 것입니다. machine learning의 목적은 결국 unseen data 즉, test data에 대해 좋은 성능을 내는 것입니다. 그러므로 모델을 만든 후 이 모델이 unseen data에 대해 얼마나 잘 동작할지에 대해서 반드시 확인이 필요합니다. 하지만 training data를 사용해 성능을 평가하면 안되기 때문에 따로 validation set을 만들어 정확도를 측정하는 것입니다. 두 번째는 모델을 튜닝하여 모델의 성능을 높일 수 있습니다. 예를 들어 overfitting 등을 막을 수 있습니다. 예를 들어 training accuracy는 높은데 validation accuracy는 낮다면 데이터가 training set에 overfitting이 일어났을 가능성을 생각해볼 수 있습니다. 그렇다면 overfitting을 막아서 training accuracy를 희생하더라도 validation accuracy와 training accuracy를 비슷하게 맞춰줄 필요가 있습니다. 예를 들어 Deep learing을 모델을 구축한다면 regularization 과정을 한다거나 epoch을 줄이는 등의 방식으로 overfitting을 막을 수 있습니다.
X = df.iloc[:,1:-1]
y = df['mpg']
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer( [ ('encoder',OneHotEncoder(), [6] ) ] , remainder='passthrough' )
X = ct.fit_transform(X)
X = X[:,1:]
from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size= 0.2 , random_state=0)
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
def build_model():
model = Sequential()
model.add(Dense(64,'relu',input_shape= (8,)))
model.add(Dense(64,'relu'))
model.add(Dense(1,'linear'))
# 옵티마이저의 learning rate설정하는방법
model.compile(tf.keras.optimizers.RMSprop(learning_rate=0.001), loss= 'mse',metrics= ['mse','mae'])
return model
model = build_model()
model.summary()
X_train.shape
epoch_history = model.fit(X_train,y_train, epochs= 1000, validation_split=0.2)
'Deep Learning' 카테고리의 다른 글
Deep Learning : Flatten 라이브러리 사용하는 이유 (0) | 2022.06.13 |
---|---|
Deep Learning : EarlyStopping 라이브러리 사용법 (0) | 2022.06.13 |
Deep Learning : learning rate를 옵티마이저에서 셋팅하는 코드 / 실습문제 풀기 (0) | 2022.06.13 |
Deep Learning : 텐서플로우로, 분류의 문제 모델링 하는 방법 (0) | 2022.06.10 |
Deep Learning : 텐서플로우에서 학습시 epoch와 batch_size에 대한설명 (0) | 2022.06.10 |