0

I built the DNN model for predicting the survivability of breast cancer patients, I Want to predict class label (Died or Survive)for new cases, how to implement it? In summary: What I would like to apply is to predict a new case, without conducting the training process directly, just I want to show the result of the class label either died from breast cancer (1) or survived(0).

dataset=pd.read_csv("C:/Users/User/Desktop/mixed 7 12-2-2020.csv",encoding='cp1252')

array = dataset.values
X = array[:, 0:33]
y = array[:, 33]

n_features, n_outputs = X.shape[1], 1

def create_model():

    model = Sequential()
    model.add(Input(n_features))
    model.add(BatchNormalization())
    model.add(Dense(51, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(68, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(85, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(85, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(68, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(51, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(n_outputs, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', 
              optimizer='Adam', 
              metrics=['accuracy'])
    #model.summary()
    return model
checkpoint = tf.keras.callbacks.ModelCheckpoint(
                                "model.{epoch:02d}-{val_loss:.2f}.hdf5", 
                                monitor='val_accuracy', 
                                verbose=1, 
                                save_best_only=True)

EPOCHS = 50
BATCH_SIZE = 128
N_FOLDS = 10

ACC_array = np.array([])
sensitivity_array = np.array([])
specificity_array = np.array([])

kf = KFold(n_splits=N_FOLDS, shuffle=True)
kf = kf.split(X, y)

for train_index, valid_index in kf:
    X_train, X_valid = X[train_index], X[valid_index]
    y_train, y_valid = y[train_index], y[valid_index]

    model = create_model()
    # fit network
    model.fit(X_train, y_train, validation_data=(X_valid, y_valid), 
          epochs=EPOCHS, batch_size=BATCH_SIZE, 
#              callbacks=[checkpoint]
              )  

   #model.load_weights("model.best.hdf5")

    X_valid = X_valid.astype(np.float32)

    predictions = model.predict(X_valid, batch_size=BATCH_SIZE)
    y_pred = np.round(predictions[:, 0])

confusion = skl.metrics.confusion_matrix(y_valid, y_pred)
TP = confusion[1, 1]
TN = confusion[0, 0]
FP = confusion[0, 1]
FN = confusion[1, 0]

# Accuracy
accuracy = (TP + TN) / float(TP + TN + FP + FN)
# Sensitivity    
sensitivity = TP / float(FN + TP)
# Specificity
specificity = TN / float(TN + FP)

ACC_array = np.append(ACC_array, accuracy)
sensitivity_array = np.append(sensitivity_array, sensitivity)
specificity_array = np.append(specificity_array, specificity)

ACC_mean = np.mean(ACC_array, axis=0)
print('mean Accuracy', ACC_mean * 100)
sensitivity_mean = np.mean(sensitivity_array, axis=0)
print('mean sensitivity', sensitivity_mean * 100)
specificity_mean = np.mean(specificity_array, axis=0)
print('mean specificity', specificity_mean * 100)
bashar
  • 155
  • 2
  • 14
  • This is a duplicate of [this question](https://stackoverflow.com/questions/37891954/keras-how-do-i-predict-after-i-trained-a-model) – alejandro zuleta May 31 '20 at 00:13

1 Answers1

0

This answer: Get class labels from Keras functional model may be what you are looking for.

I'm assuming you want to convert the raw probabilities output by your model into a discrete class (1 or 0).

darcycp
  • 121
  • 1
  • 10