1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class FairnessTester: def __init__(self): self.demographics = { 'skin_tone': ['I', 'II', 'III', 'IV', 'V', 'VI'], 'age': ['18-30', '31-45', '46-60', '61-75'], 'gender': ['male', 'female'], 'glasses': ['yes', 'no'] } def stratified_test(self, model, test_dataset): """ 分层测试 返回: 各人口组的性能指标 """ results = {} for skin_tone in self.demographics['skin_tone']: subset = test_dataset.filter(skin_tone=skin_tone) metrics = self.evaluate(model, subset) results[f'skin_{skin_tone}'] = metrics return results def evaluate(self, model, data): """评估性能""" predictions = model.predict(data.images) return { 'accuracy': self.calc_accuracy(predictions, data.labels), 'precision': self.calc_precision(predictions, data.labels), 'recall': self.calc_recall(predictions, data.labels), 'f1': self.calc_f1(predictions, data.labels) }
|