/
experiment-RM.py
47 lines (36 loc) · 1.44 KB
/
experiment-RM.py
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
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python3
from data import adult, german, singles
from utils import errorBars, arrayErrorBars, experimentCrossValidate
from boosting import boost
from svm import svmSKL, svmLinearSKL
from lr import lrSKL
from weaklearners.decisionstump import buildDecisionStump
from errorfunctions import signedStatisticalParity, labelError, individualFairness
from massaging import randomOneSideMassageData
@arrayErrorBars(2)
def statistics(massager, trainingData, testData, protectedIndex, protectedValue,
learner, flipProportion=0.2):
massagedData = massager(trainingData, protectedIndex, protectedValue)
h = learner(massagedData)
error = labelError(testData, h)
bias = signedStatisticalParity(testData, protectedIndex, protectedValue, h)
ubif = individualFairness(trainingData, learner, flipProportion)
return error, bias, ubif
def runAll():
print("Random Massaging")
experiments = [
(('SVM', svmSKL), adult),
(('SVMlinear', svmLinearSKL), german),
(('SVM', svmSKL), singles),
(('AdaBoost', boost), adult),
(('AdaBoost', boost), german),
(('AdaBoost', boost), singles),
(('LR', lrSKL), adult),
(('LR', lrSKL), german),
(('LR', lrSKL), singles),
]
for (learnerName, learner), dataset in experiments:
print("%s %s" % (dataset.name, learnerName))
experimentCrossValidate(dataset, learner, 5, statistics, massage=True)
if __name__ == '__main__':
runAll()