Source code for src.ml_cfexplainer.explainer.cf_simplebn

import numpy as np
import pandas as pd

import torch
from pymoo.model.problem import Problem

from .distance import Distance
import autograd.numpy as anp


if torch.cuda.is_available():
    dev = "cuda:0"
else:
    dev = "cpu"
device = torch.device(dev)


[docs]class CF_SimpleBN(Problem): def __init__(self, x0, pred_model, dfencoder_model, scm_model, proto, col, con_index = None, cat_index = None, n_var=3, **kwargs): super().__init__(n_var=n_var, n_obj=3, n_constr=0, type_var=anp.double, elementwise_evaluation=True, xl=np.array([0, 0, 0]), xu=np.array([1, 1, 1]), **kwargs) self.x0 = x0 self.pred_model = pred_model self.dfencoder_model = dfencoder_model self.scm_model = scm_model self.col = col self.proto = proto self.con_index = con_index def _evaluate(self, xcf, out, *args, **kwargs): xcf[2] = self.scm_model.predict(xcf[:2].reshape(1, -1)) """Create the distance object""" dist = Distance(self.x0, xcf, self.pred_model, self.dfencoder_model, con_index=self.con_index) condist = dist.continous_dist() yloss = dist.logloss() # closs = causal_loss(self.scm_model, xcf, self.x0) df_store = pd.DataFrame(columns=self.col) df_store.loc[0] = xcf zcf = self.dfencoder_model.get_representation(df_store)[0] out["F"] = anp.column_stack([yloss, condist])
# out["G"] = 0.5 - yloss