Commit e7a3382190afad3c1db8a093af6bf1a062c022b2

Authored by Tássia Camões Araújo
1 parent 87abb5d5
Exists in master and in 1 other branch add_vagrant

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 """
... ...