我在python 3中运行一个函数,它将值计为浮点数,但当它们被分割时返回值为0,就好像它们是整数一样。
功能:
def precision_recall(predictions, results):
#values initiated as floats for later division
tp, fp, fn, tn, i = 0.0, 0.0, 0.0, 0.0, 0
while i < len(results):
if predictions[i] == 1 and results[i] == 1:
tp = tp + 1
elif predictions[i] == 1 and results[i] == 0:
fp = fp + 1
elif predictions[i] == 0 and results[i] == 0:
tn = tn + 1
else:
fn = fn + 1
i = i + 1
precision = tp / (tp + fp)
recall = tn / (tn + fn)
f1 = precision*recall / (precision + recall)
print("Precision: %d, Recall: %d, f1: %d" % (precision, recall, f1))
print(tp, fp, fn, tn)
变量预测和结果是填充值为0或1的列表。
此函数返回以下输出:
Precision: 0, Recall: 0, f1: 0
(113.0, 34.0, 23.0, 187.0)
即,除非用于浮点值,否则除法返回0。
此外,如果我在命令行上运行相同的Precision公式,一切运行正常:
113.0 / (113.0 + 34.0)
Out[25]: 0.7687074829931972
我用numpy,pandas和sklearn编写这个脚本,但是我不相信任何这些应该改变这种操作应该发生的方式。
我也使用Python 3,我的理解是它自动将分区作为浮点数处理。
此外,如果我进行此修改:
precision = tp / float(tp + fp)
我得到了相同的结果。
我已经尝试了
from __future__ import divsion
这也没有改变任何东西。
有人知道可能出现什么问题吗?
this response中的答案都不适合我。