3 回答

TA貢獻1783條經(jīng)驗 獲得超4個贊
這可以通過將數(shù)據(jù)轉(zhuǎn)換為 aStandardDataset
然后調(diào)用fair_metrics
以下函數(shù)來完成:
from aif360.datasets import StandardDataset
from aif360.metrics import BinaryLabelDatasetMetric, ClassificationMetric
dataset = StandardDataset(df,?
? ? ? ? ? ? ? ? ? ? ? ? ? label_name='income',?
? ? ? ? ? ? ? ? ? ? ? ? ? favorable_classes=[1],?
? ? ? ? ? ? ? ? ? ? ? ? ? protected_attribute_names=['gender'],?
? ? ? ? ? ? ? ? ? ? ? ? ? privileged_classes=[[1]])
def fair_metrics(dataset, y_pred):
? ? dataset_pred = dataset.copy()
? ? dataset_pred.labels = y_pred
? ? ? ??
? ? attr = dataset_pred.protected_attribute_names[0]
? ??
? ? idx = dataset_pred.protected_attribute_names.index(attr)
? ? privileged_groups =? [{attr:dataset_pred.privileged_protected_attributes[idx][0]}]?
? ? unprivileged_groups = [{attr:dataset_pred.unprivileged_protected_attributes[idx][0]}]?
? ? classified_metric = ClassificationMetric(dataset, dataset_pred, unprivileged_groups=unprivileged_groups, privileged_groups=privileged_groups)
? ? metric_pred = BinaryLabelDatasetMetric(dataset_pred, unprivileged_groups=unprivileged_groups, privileged_groups=privileged_groups)
? ? result = {'statistical_parity_difference': metric_pred.statistical_parity_difference(),
? ? ? ? ? ? ?'disparate_impact': metric_pred.disparate_impact(),
? ? ? ? ? ? ?'equal_opportunity_difference': classified_metric.equal_opportunity_difference()}
? ? ? ??
? ? return result
fair_metrics(dataset, y_pred)
它返回正確的結(jié)果(圖像參考):
{'statistical_parity_difference': -0.6666666666666667,
?'disparate_impact': 0.3333333333333333,
?'equal_opportunity_difference': 0.0}

TA貢獻1786條經(jīng)驗 獲得超11個贊

TA貢獻1779條經(jīng)驗 獲得超6個贊
我有同樣的問題。y_pred_default是數(shù)組類型,整個數(shù)據(jù)集是Dataframe。但是,如果將 y_pred_default 轉(zhuǎn)換為數(shù)據(jù)幀,您將丟失值的順序,因此它將向新數(shù)據(jù)集顯示 nan 值。所以我將數(shù)據(jù)集轉(zhuǎn)換為 numpy 數(shù)組,然后與 y_pred_default 數(shù)組連接并轉(zhuǎn)換為數(shù)據(jù)幀。此外,您還必須首先更改列名稱,因為現(xiàn)在有數(shù)字。通過這樣做,你就得到了你想要的。包含 x 值和相應(yīng) y 預(yù)測值的數(shù)據(jù)框,用于計算 spd 指標(biāo)。
添加回答
舉報