def cross_validation_mse_rdkit(param):

    param["num_epochs"] = int(np.round(param["num_epochs"]))

    MSE = []
    for train_index, test_index in kf5.split(train_RDKIT, train_Y):
        model = build_model(input_dim=2048,
                            learning_rate=param["learning_rate"],
                            decay=param["decay"],
                            momentum=param["momentum"],
                            l2_parameter=param["l2_parameter"],
                            hidden_layer_size1=param["hidden_layer_size1"],
                            hidden_layer_size2=param["hidden_layer_size2"])

        model.fit(np.array(train_RDKIT[train_index]),
                  np.array(train_Y[train_index]),
                  epochs=param["num_epochs"],
                  batch_size=param["batch_size"],
                  verbose=0)

        MSE.append(
            np.mean(
                abs(
                    model.predict(np.array(train_RDKIT[test_index])) -
                    np.array(train_Y[test_index]))**2))

    return (np.mean(MSE))
def cross_validation_mse_gradient_boosting_maccs(param):
    num_round = param["num_rounds"]
    del param["num_rounds"]
    param["max_depth"] = int(np.round(param["max_depth"]))

    MSE = []
    for i in range(5):
        train_index, test_index = CV_indices_train[i], CV_indices_test[i]
        train_index = [
            True if ind in train_index else False
            for ind in list(brenda_train.index)
        ]
        test_index = [
            True if ind in test_index else False
            for ind in list(brenda_train.index)
        ]

        dtrain = xgb.DMatrix(train_MACCS[train_index],
                             label=train_Y[train_index])
        dvalid = xgb.DMatrix(train_MACCS[test_index])
        bst = xgb.train(param, dtrain, int(num_round), verbose_eval=False)

        y_valid_pred = bst.predict(dvalid)
        MSE.append(
            np.mean(
                abs(np.reshape(train_Y[test_index], (-1)) - y_valid_pred)**2))
    return (np.mean(MSE))