Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
num_classes = 2 # binary label dataset
dirichlet_alpha = concentration / num_classes
# compute counts for all intersecting groups, e.g. black-women, white-man, etc
intersect_groups = np.unique(self.dataset.protected_attributes, axis=0)
num_intersects = len(intersect_groups)
counts_pos = np.zeros(num_intersects)
counts_total = np.zeros(num_intersects)
for i in range(num_intersects):
condition = [dict(zip(self.dataset.protected_attribute_names,
intersect_groups[i]))]
counts_total[i] = utils.compute_num_instances(
self.dataset.protected_attributes,
self.dataset.instance_weights,
self.dataset.protected_attribute_names, condition=condition)
counts_pos[i] = utils.compute_num_pos_neg(
self.dataset.protected_attributes, labels,
self.dataset.instance_weights,
self.dataset.protected_attribute_names,
self.dataset.favorable_label, condition=condition)
# probability of y given S (p(y=1|S))
return (counts_pos + dirichlet_alpha) / (counts_total + concentration)
def num_pred_negatives(self, privileged=None):
r""":math:`\sum_{i=1}^n \mathbb{1}[\hat{y}_i = \text{unfavorable}]`
Args:
privileged (bool, optional): Boolean prescribing whether to
condition this metric on the `privileged_groups`, if `True`, or
the `unprivileged_groups`, if `False`. Defaults to `None`
meaning this metric is computed over the entire dataset.
Raises:
AttributeError: `privileged_groups` or `unprivileged_groups`
must be provided at initialization to condition on them.
"""
condition = self._to_condition(privileged)
return utils.compute_num_pos_neg(
self.classified_dataset.protected_attributes,
self.classified_dataset.labels,
self.classified_dataset.instance_weights,
self.classified_dataset.protected_attribute_names,
self.classified_dataset.unfavorable_label,
condition=condition)
r"""Compute the number of positives,
:math:`P = \sum_{i=1}^n \mathbb{1}[y_i = 1]`,
optionally conditioned on protected attributes.
Args:
privileged (bool, optional): Boolean prescribing whether to
condition this metric on the `privileged_groups`, if `True`, or
the `unprivileged_groups`, if `False`. Defaults to `None`
meaning this metric is computed over the entire dataset.
Raises:
AttributeError: `privileged_groups` or `unprivileged_groups` must be
must be provided at initialization to condition on them.
"""
condition = self._to_condition(privileged)
return utils.compute_num_pos_neg(self.dataset.protected_attributes,
self.dataset.labels, self.dataset.instance_weights,
self.dataset.protected_attribute_names,
self.dataset.favorable_label, condition=condition)
r"""Compute the number of negatives,
:math:`N = \sum_{i=1}^n \mathbb{1}[y_i = 0]`, optionally conditioned on
protected attributes.
Args:
privileged (bool, optional): Boolean prescribing whether to
condition this metric on the `privileged_groups`, if `True`, or
the `unprivileged_groups`, if `False`. Defaults to `None`
meaning this metric is computed over the entire dataset.
Raises:
AttributeError: `privileged_groups` or `unprivileged_groups` must be
must be provided at initialization to condition on them.
"""
condition = self._to_condition(privileged)
return utils.compute_num_pos_neg(self.dataset.protected_attributes,
self.dataset.labels, self.dataset.instance_weights,
self.dataset.protected_attribute_names,
self.dataset.unfavorable_label, condition=condition)
def num_pred_positives(self, privileged=None):
r""":math:`\sum_{i=1}^n \mathbb{1}[\hat{y}_i = \text{favorable}]`
Args:
privileged (bool, optional): Boolean prescribing whether to
condition this metric on the `privileged_groups`, if `True`, or
the `unprivileged_groups`, if `False`. Defaults to `None`
meaning this metric is computed over the entire dataset.
Raises:
AttributeError: `privileged_groups` or `unprivileged_groups`
must be provided at initialization to condition on them.
"""
condition = self._to_condition(privileged)
return utils.compute_num_pos_neg(
self.classified_dataset.protected_attributes,
self.classified_dataset.labels,
self.classified_dataset.instance_weights,
self.classified_dataset.protected_attribute_names,
self.classified_dataset.favorable_label,
condition=condition)