맞춤 평가 함수로 CNN 성능 평가

데이터 분석을 하고 있어, 스스로 CNN의 평가 함수를 만들어 평가할 필요가 있었으므로, 만드는 방법을 메모해 둡니다.

만들 평가 함수



이번에는 결정 계수 (R2)를 평가 함수로 작성했습니다.
R2는 다음 식으로 표시됩니다.



프로그램



평가 함수 (R2) 자체의 프로그램은 다음과 같습니다.
def r2(y_true, y_pred):
    SS_res =  K.sum(K.square(y_true - y_pred)) 
    SS_tot = K.sum(K.square(y_true - K.mean(y_true))) 
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )

이 함수를 다음과 같이 모델의 메트릭에 포함합니다. 이번에는 CNN 모델을 사용하고 있습니다.
def build_model():

    model = Sequential()
    model.add(Dense(500, activation='relu', input_shape=(X_train.shape[1],), kernel_initializer='he_normal'))
    model.add(Dropout(0.1))

    model.add(Dense(300, activation='relu', kernel_initializer='he_normal'))
    model.add(Dropout(0.1))

    model.add(Dense(100, activation='relu', kernel_initializer='he_normal'))
    model.add(Dropout(0.1))

    model.add(Dense(1, activation='sigmoid'))

    model.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['mae', r2])

    return model

이 모델을 다음과 같이 실행하면 R2도 표시되어 출력됩니다.
reg = KerasRegressor(build_fn=build_model, validation_data=(X_test, y_test), 
                     batch_size=100, 
                     epochs=5, 
                     verbose=1)
history = reg.fit(X_train, y_train)
Train on 11671 samples, validate on 2060 samples
Epoch 1/5
11671/11671 [==============================] - 4s 366us/step 
- loss: 1.1265 - mean_absolute_error: 0.2145 - r2_keras: -1.7520 - val_loss: 0.6966 - val_mean_absolute_error: 0.1376 - val_r2_keras: 0.0823
Epoch 2/5
11671/11671 [==============================] - 4s 311us/step 
- loss: 0.7213 - mean_absolute_error: 0.1264 - r2_keras: 0.1204 - val_loss: 0.6822 - val_mean_absolute_error: 0.1165 - val_r2_keras: 0.3338
Epoch 3/5
11671/11671 [==============================] - 4s 311us/step 
- loss: 0.6593 - mean_absolute_error: 0.1153 - r2_keras: 0.3085 - val_loss: 0.6790 - val_mean_absolute_error: 0.1015 - val_r2_keras: 0.4019
Epoch 4/5
11671/11671 [==============================] - 4s 308us/step 
- loss: 0.6433 - mean_absolute_error: 0.0993 - r2_keras: 0.4104 - val_loss: 0.6678 - val_mean_absolute_error: 0.0991 - val_r2_keras: 0.4225
Epoch 5/5
11671/11671 [==============================] - 4s 315us/step 
- loss: 0.6362 - mean_absolute_error: 0.0953 - r2_keras: 0.4335 - val_loss: 0.6646 - val_mean_absolute_error: 0.0982 - val_r2_keras: 0.4332

평가 함수의 내용을 변경하여 다양한 사용자 정의 함수로 평가할 수 있습니다.

좋은 웹페이지 즐겨찾기