在我的代码中使用 AIF360 指标时出现问题

A problem in using AIF360 metrics in my code

我正在尝试 运行 AI Fairness 360 指标关于短剧学习(不平衡学习)算法,但我的代码有问题。 问题是当我应用像 SMOTE 这样的 skit-learn(不平衡学习)算法时,它 return 是一个 numpy 数组。而 AI Fairness 360 预处理方法 return BinaryLabelDataset。然后指标应该从 BinaryLabelDataset class 接收一个对象。我被困在如何将我的数组转换为 BinaryLabelDataset 以便能够使用度量。

我的预处理算法需要接收 X,Y。所以,我在调用SMOTE方法之前将数据集拆分为X和Y。使用SMOTE之前的数据集是standard_dataset,使用指标是可以的,但是我使用SMOTE方法之后的问题是因为它将数据转换为numpy数组。

我在 运行 执行代码后出现以下错误:

File "adult_dataset.py", line 654, in <module>
cm = BinaryLabelDatasetMetric(y_pred, privileged_groups=p, unprivileged_groups=u)

raise TypeError("'dataset' should be a BinaryLabelDataset or a MulticlassLabelDataset")
TypeError: 'dataset' should be a BinaryLabelDataset or a MulticlassLabelDataset

这是我的代码:

# dataset_orig is standard_dataset
scaler = MinMaxScaler(copy=False)
dataset_orig.features = scaler.fit_transform(dataset_orig.features)

# Spilitting data to X and Y 
X_orig = dataset_orig.features
y_orig = dataset_orig.labels

# SMOTETomek returns X_resampled, y_resampled as numpy arrays
smote_tomek = SMOTETomek(random_state=0)
X_resampled, y_resampled = smote_tomek.fit_resample(X_orig, X_orig)


#Creation of Train and Test dataset
X_train, X_test, y_train, y_test = 
train_test_split(X_resampled,y_resampled,test_size=0.2,random_state=42)


model.fit(X_train, y_train)
y_pred = model.predict(X_test)

p = [{'sex': 1.}]
u = [{'sex': 0.}]
cm = BinaryLabelDatasetMetric(y_pred, privileged_groups=p, unprivileged_groups=u)
print("Disparate_Impact", cm.disparate_impact())
print("Statistical Parity Difference", cm.statistical_parity_difference())
print("Consistency (Individual Fairness)", cm.consistency())

我认为调用 BinaryLabelDatasetMetric 时 y_pred 存在问题。它应该是 BinaryLabelDataset。有什么方法可以在我的代码中使用 AIF360 指标吗?

您说得对,问题出在 y_pred。您可以将其连接到 X_test,将其转换为 StandardDataset object, and then pass that one to the BinaryLabelDatasetMetric. The output object will have the methods for calculating different fairness metrics. I do not know how your dataset looks like, but 是一个完整的可重现示例,您可以对其进行调整以对数据集执行此过程。