def discrete_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood(node, data, dtype) scipy_obj, params = get_scipy_obj_params(node) probs[~marg_ids] = scipy_obj.pmf(observations, **params) probs[probs == 1.0] = 0.999999999 probs[probs == 0.0] = 0.000000001 return probs
def categorical_dictionary_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype) dict_probs = [node.p.get(val, 0.0) for val in observations] probs[~marg_ids] = dict_probs return probs
def piecewise_log_likelihood(node, data=None, dtype=np.float64, **kwargs): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype, log_space=True) probs[~marg_ids] = piecewise_complete_cases_log_likelihood(node, observations, dtype=dtype) return probs
def gamma_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood(node, data, dtype) observations[observations == 0] += POS_EPS scipy_obj, params = get_scipy_obj_params(node) probs[~marg_ids] = scipy_obj.pdf(observations, **params) return probs
def discrete_log_likelihood(node, data=None, dtype=np.float64, **kwargs): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype, log_space=True) scipy_obj, params = get_scipy_obj_params(node) probs[~marg_ids] = scipy_obj.logpmf(observations, **params) # probs[probs == 1.0] = 0.999999999 # probs[np.isinf(probs)] = 0.000000001 probs[np.isinf(probs)] = MIN_NEG # 0.000000001 return probs
def categorical_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood(node, data, dtype) cat_data = observations.astype(np.int64) assert np.all(np.equal(np.mod(cat_data, 1), 0)) out_domain_ids = cat_data >= node.k idx_out = ~marg_ids idx_out[idx_out] = out_domain_ids probs[idx_out] = 0 idx_in = ~marg_ids idx_in[idx_in] = ~out_domain_ids probs[idx_in] = np.array(node.p)[cat_data[~out_domain_ids]] return probs
def gaussian_likelihood(node, data=None, dtype=np.float64, bmarg=None, ibm=None): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype) scipy_obj, params = get_scipy_obj_params(node) # probs[~marg_ids] = scipy_obj.pdf(observations, **params) if bmarg: ibm = ibm[:, node.scope] probs_reliable = np.expand_dims(scipy_obj.pdf(observations, **params), axis=1) probs_unreliable = np.expand_dims(scipy.stats.norm.cdf( observations, loc=params['loc'], scale=params['scale']), axis=1) probs = np.where(ibm, probs_reliable, probs_unreliable) else: probs[~marg_ids] = scipy_obj.pdf(observations, **params) return probs
def continuous_likelihood(node, data=None, dtype=np.float64, **kwargs): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype) scipy_obj, params = get_scipy_obj_params(node) probs[~marg_ids] = scipy_obj.pdf(observations, **params) return probs
def uniform_log_likelihood(node, data=None, dtype=np.float64, **kwargs): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype, log_space=True) probs[~marg_ids] = np.log(node.density) return probs
def uniform_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype) probs[~marg_ids] = node.density return probs
def poisson_likelihood(node, data=None, dtype=np.float64): probs, marg_ids, observations = leaf_marginalized_likelihood( node, data, dtype) scipy_obj, params = get_scipy_obj_params(node) probs[~marg_ids] = scipy_obj.pmf(observations, **params) return probs