Commit e7a3382190afad3c1db8a093af6bf1a062c022b2
1 parent
87abb5d5
Exists in
master
and in
1 other branch
New metrics definition: generic F_score and FPR.
Showing
1 changed file
with
28 additions
and
10 deletions
Show diff stats
src/evaluation.py
| ... | ... | @@ -123,16 +123,33 @@ class Recall(Metric): |
| 123 | 123 | """ |
| 124 | 124 | return float(len(evaluation.true_positive))/len(evaluation.real_relevant) |
| 125 | 125 | |
| 126 | -class F1(Metric): | |
| 126 | +class FPR(Metric): | |
| 127 | + """ | |
| 128 | + False positive rate (used for ploting ROC curve). | |
| 129 | + """ | |
| 130 | + def __init__(self): | |
| 131 | + """ | |
| 132 | + Set metric description. | |
| 133 | + """ | |
| 134 | + self.desc = " FPR " | |
| 135 | + | |
| 136 | + def run(self,evaluation): | |
| 137 | + """ | |
| 138 | + Compute metric. | |
| 139 | + """ | |
| 140 | + return float(len(evaluation.false_positive))/evaluation.true_negatives_len | |
| 141 | + | |
| 142 | +class F_score(Metric): | |
| 127 | 143 | """ |
| 128 | 144 | Classification accuracy metric which correlates precision and recall into an |
| 129 | 145 | unique measure. |
| 130 | 146 | """ |
| 131 | - def __init__(self): | |
| 147 | + def __init__(self,k): | |
| 132 | 148 | """ |
| 133 | 149 | Set metric description. |
| 134 | 150 | """ |
| 135 | - self.desc = " F1 " | |
| 151 | + self.desc = " F_score " | |
| 152 | + self.k = k | |
| 136 | 153 | |
| 137 | 154 | def run(self,evaluation): |
| 138 | 155 | """ |
| ... | ... | @@ -140,8 +157,8 @@ class F1(Metric): |
| 140 | 157 | """ |
| 141 | 158 | p = Precision().run(evaluation) |
| 142 | 159 | r = Recall().run(evaluation) |
| 143 | - if (p+r)>0: | |
| 144 | - return float(2*((p*r)/(p+r))) | |
| 160 | + if ((self.k*self.k*p)+r)>0: | |
| 161 | + return float(((1+(self.k*self.k))*((p*r)/((self.k*self.k*p)+r)))) | |
| 145 | 162 | else: |
| 146 | 163 | return 0 |
| 147 | 164 | |
| ... | ... | @@ -237,11 +254,12 @@ class Evaluation: |
| 237 | 254 | self.false_negative = [v[0] for v in self.real_relevant if not v[0] in |
| 238 | 255 | [w[0] for w in self.predicted_relevant]] |
| 239 | 256 | |
| 240 | - logging.debug("TP: %d" % len(self.true_positive)) | |
| 241 | - logging.debug("FP: %d" % len(self.false_positive)) | |
| 242 | - logging.debug("FN: %d" % len(self.false_negative)) | |
| 243 | - logging.debug("Repo_size: %d" % self.repository_size) | |
| 244 | - logging.debug("Relevant: %d" % len(self.real_relevant)) | |
| 257 | + self.true_negatives_len = self.repository_size - len(self.real_relevant) | |
| 258 | + #logging.debug("TP: %d" % len(self.true_positive)) | |
| 259 | + #logging.debug("FP: %d" % len(self.false_positive)) | |
| 260 | + #logging.debug("FN: %d" % len(self.false_negative)) | |
| 261 | + #logging.debug("Repo_size: %d" % self.repository_size) | |
| 262 | + #logging.debug("Relevant: %d" % len(self.real_relevant)) | |
| 245 | 263 | |
| 246 | 264 | def run(self,metric): |
| 247 | 265 | """ | ... | ... |