Skip to content
Snippets Groups Projects
Commit af25c330 authored by lbecker's avatar lbecker
Browse files

Upload New File

parent dbf954b7
Branches
No related tags found
No related merge requests found
import measures as ms
class measure_model:
def __init__(self,clf_1,clf_2,x_test,y_test,x_1_test,y_1_test,x_2_test,y_2_test,single_classifier=True):
self.clf_1 = clf_1 #in case of group-specific classifiers, the classifier of group 1, otherwise the general classifier
self.clf_2 = clf_2 #in case of group-specific classifiers, the classifier of group 1, otherwise the general classifier
self.y_test = y_test
self.x_test = x_test
self.x_1_test = x_1_test
self.x_2_test = x_2_test
self.y_1_test = y_1_test
self.y_2_test=y_2_test
self.single_classifier=single_classifier
def get_measures(self):
labels,y_1,y_2,cm1,cm2=self.get_measures_by_sensitive_group()
IGQRs=self.get_IGQRs(y_1, y_2)
if self.single_classifier:
TN, FP, FN, TP =ms.get_confusion_matrix(self.y_test, self.clf_1.predict(self.x_test))
labels,y,cm = ms.get_measure_values(TN, FP, FN, TP)
else:
#Situation of one classifier per group. The overall measure values are calculated by building the weighted mean of the group-specific values to support comparisons to
#single classifiers
w_1 = self.y_1_test.shape[0]/self.y_test.shape[0]
w_2 = self.y_2_test.shape[0]/self.y_test.shape[0]
y=[y_1[i]*w_1 + y_2[i]*w_2 for i in range(len(y_1))]
return labels,y,y_1,y_2,IGQRs,cm1,cm2
def get_measures_by_sensitive_group(self):
TN1, FP1, FN1, TP1 =ms.get_confusion_matrix(self.y_1_test, self.clf_1.predict(self.x_1_test))
TN2, FP2, FN2, TP2 =ms.get_confusion_matrix(self.y_2_test, self.clf_2.predict(self.x_2_test))
labels,y_1,cm1 = ms.get_measure_values(TN1, FP1, FN1, TP1)
labels,y_2,cm2 = ms.get_measure_values(TN2, FP2, FN2, TP2)
return labels,y_1,y_2,cm1,cm2
def get_IGQRs(self,y_1,y_2):
'''
Calculation of the IGQR values based on the definition from the thesis. An IGQR is further invalid (encoded by -1) if one of the group-specific quality measures is invalid.
'''
IGQRs=[]
for i in range(len(y_1)):
if y_1[i]==0 and y_2[i]==0:
IGQRs.append(1)
elif y_1[i]!=-1 and y_2[i]!=-1:
IGQRs.append(min(y_1[i],y_2[i])/max(y_1[i],y_2[i]))
else:
IGQRs.append(-1)
return IGQRs
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment