def compute_log_loss_per_data()

in bindings/python-compute/data_manager.py [0:0]


def compute_log_loss_per_data(pred_df, target_df, n_models, n_classes):
    loss_list = []
    if n_classes > 1:
        # classification
        log_loss_single = lambda x: log_loss([x[0]], [x[1:]], labels=list(range(n_classes)))
    else:
        # regression
        log_loss_single = lambda x: mean_squared_log_error([x[0]], [x[1:]])

    for model in range(n_models):
        try:
            ground_truth = target_df[TARGET_COL_OUT(model)].values
        except KeyError:
            ground_truth = target_df[TARGET_COL_OUT(0)].values

        eval_array = np.hstack([np.expand_dims(ground_truth, axis=1),
                                pred_df.iloc[:, model * n_classes: (model + 1) * n_classes]])
        loss_array = np.apply_along_axis(log_loss_single, 1, eval_array)
        loss_list += [np.expand_dims(loss_array, 1)]
    return np.hstack(loss_list)