我试图在skit learn(不平衡学习)算法上运行AI Fairity 360 metrics,但我的代码有问题。 问题是,当我应用skit learn(不平衡学习)算法(如SMOTE)时,它返回一个numpy数组。而AI预处理方法返回二进制标签数据集。然后度量应该从BinaryLabelDataset类接收一个对象。我被困在如何将数组转换为BinaryLabelDataset以便能够使用度量
我的预处理算法需要接收X,Y。因此,我在调用SMOTE方法之前将数据集拆分为X和Y。使用SMOTE之前的数据集是标准的_数据集,可以使用度量,但使用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指标
您认为问题出在} 对象,然后将该对象传递给^{} 。输出对象将具有计算不同公平性度量的方法。我不知道您的数据集是什么样子的,但是here是一个完全可复制的示例,您可以对您的数据集进行此过程
y_pred
上是正确的。您可以将其连接到X_test
,将其转换为^{相关问题 更多 >
编程相关推荐