머신 러닝 알고리즘을 개발할 때, 데이터를 학습용 데이터와 테스트용 데이터로 나누어야합니다. 이를 통해 모델의 성능을 평가하고 검증할 수 있습니다.
학습 데이터 세트 (Training Dataset): 모델이 학습할 때 사용하는 데이터 세트입니다. 학습 데이터 세트를 사용하여 모델을 훈련하고, 모델이 예측한 출력 값과 실제 값 사이의 차이를 최소화하는 모델 매개 변수를 찾습니다.
테스트 데이터 세트 (Test Dataset): 모델이 완성되고 최적화된 후에 사용하는 데이터 세트입니다. 테스트 데이터 세트를 사용하여 모델이 얼마나 잘 일반화되었는지 평가합니다. 즉, 이전에 본 적이 없는 새로운 데이터에 대해 모델의 성능을 측정합니다.
데이터를 학습 데이터와 테스트 데이터로 나누는 이유는 모델이 학습 데이터에 과적합(overfitting)되지 않도록 하기 위해서입니다. 과적합은 모델이 학습 데이터에만 잘 작동하고, 새로운 데이터에 대해 예측을 제대로 수행하지 못하는 현상입니다. 따라서 학습 데이터와 테스트 데이터를 분리하여 모델의 성능을 검증하면, 모델이 일반적인 경우에도 잘 작동하는지 확인할 수 있습니다.
Train set의 예측률은 모델이 학습 데이터에 대해 얼마나 정확하게 예측하는지를 나타냅니다. 이는 모델이 학습 데이터에 대해 과적합(overfitting)되지 않고, 일반적인 특징을 잘 학습했는지 확인할 수 있습니다. 따라서, 모델의 성능 향상을 위해서는 Train set의 예측률을 높이는 것이 중요합니다.
하지만, Test set의 예측률은 모델이 학습 데이터에만 잘 작동하는 것이 아니라, 이전에 본 적이 없는 새로운 데이터에 대해서도 얼마나 잘 예측하는지를 나타냅니다. 즉, 모델이 일반화(generalization)됐는지 확인할 수 있습니다. 모델이 Test set의 예측률도 높으면, 모델이 다양한 데이터에 대해 잘 작동할 가능성이 높아지므로, 실제 운영 환경에서 높은 성능을 발휘할 가능성이 높아집니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
import pandas as pd
df = pd.read_csv('/content/sonar3.csv',header=None)
X = df.iloc[:,0:60]
y = df.iloc[:,60]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, shuffle = True)
model = Sequential()
model.add(Dense(24, input_dim = 60, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
history = model.fit(X_train, y_train, epochs = 200, batch_size = 10)
score = model.evaluate(X_test, y_test)
print('Test accuracy : ',score[1])
위의 코드는 광물을 분석해서 분류를 하는 코드입니다.
이 코드를 작성할 때 은닉층에 대해서 공부를 하시면 도움이 많이 될 것 입니다.