Certifications/AICE

5. AI 모델링 및 모델 평가

마크 주쿼버그 2024. 6. 21. 09:39

AI 모델링 및 모델 평가 파트는 총 4~5문항으로 구성되며, 전체 배점은 총 40점이다. 가장 큰 배점을 가진다.

상세 항목은 아래와 같이 구성되어 있다.

1. Scikit-learn, Tensorflow 등을 활용하여 머신러닝/딥러닝 모델링

2. 모델 성능 평가 및 그래프 출력

 

이번 게시물에서는 1번 내용과 2번 내용을 함께 정리해보도록 한다.

총 두 개의 모델을 만들기 때문에, 다양한 모델을 생성 및 학습시킬 수 있어야 한다.

 

 

1. 머신러닝/딥러닝 모델링 및 성능평가

(1) 의사결정나무 (Decision Tree): 회귀 모델 - MAE(Mean Absolute Error)

from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error

dt = DecisionTreeRegressor(random_state=42, min_samples_split=3)
dt.fit(X_train, y_train)

y_pred_dt = dt.predict(X_test)
dt_mae = mean_absolute_error(y_pred_dt, y_test)

 

(2) 랜덤포레스트 (RandomForest): 회귀 모델 - MAE(MeanAbsolute Error)

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor(random_state=42, min_samples_split=3)
rf.fit(X_train, y_train)

y_pred_rf = rf.predict(X_test)
rf_mae = mean_absolute_error(y_pred_rf, y_test)

 

 

 

 

(3) 딥러닝 모델

# 이진분류
from keras.models import Sequential
from keras.layers import Dense, Flatten, SimpleRNN, LSTM, Flatten
from keras.backend import clear_session
from keras.optimizers import Adam


model1 = Sequential( [Dense(32, input_shape=(n,), activation='relu'),
                    Dense(16, activation='relu'),
                    Dense(8, activation='relu'),
                    Dense(4, activation='relu'),
                    Dense(2, activation='relu'),
                    Dense(1, activation='sigmoid')] )

model1.summary()

model1.compile(optimizer=Adam(learning_rate=0.01), loss='binary_crossentropy')
history1 = model1.fit(x_train, y_train, epochs=50, validation_split=0.2).history
# 이진분류 Dropout 적용
from keras.models import Sequential
from keras.layers import Dense, Flatten, Dropout
from keras.backend import clear_session
from keras.optimizers import Adam


clear_session()

model2 = Sequential( [Dense(128, input_shape = (nfeatures,), activation= 'relu'),
                      Dropout(0.4),
                      Dense(64, activation= 'relu'),
                      Dropout(0.4),
                      Dense(32, activation= 'relu'),
                      Dropout(0.4),
                      Dense(1, activation= 'sigmoid')] )

model2.compile(optimizer= Adam(learning_rate = 0.001), loss='binary_crossentropy')
hist = model2.fit(x_train, y_train, epochs = 50, validation_split=0.2, verbose = 0).history
# LSTM을 이용한 시계열 모델링
from keras.models import Sequential
from keras.layers import Dense, Flatten, SimpleRNN, LSTM, Flatten
from keras.backend import clear_session
from keras.optimizers import Adam

clear_session()

model1 = Sequential([LSTM(16, input_shape=(timesteps, nfeatures), return_sequences=True),
                     LSTM(8, return_sequences=True),
                     LSTM(4, return_sequences=True),
                     Flatten(),
                     Dense(16, activation='relu'),
                     Dense(1)])

model1.summary()

model1.compile(optimizer=Adam(0.01), loss='mse')

history = model1.fit(x_train, y_train, epochs=100, verbose=0, validation_split=.2).history