通过将返回布尔值(1/0)与2D数组中的给定值进行比较,对分类器的成功进行评估

时间:2019-03-26 00:10:35

标签: python classification

我有一个包含狗及其健康状况的数组“ D”。 classifier()方法返回1或0,并以2D数组的一行作为输入。 我想将分类器结果与2D数组的第13列进行比较 在理想情况下,分类器将始终返回与该列中指定的值相同的值。 现在,我尝试通过将成功次数相加并除以结果总数来计算分类器的总点击率。

到目前为止,我已经计算出一个for循环枚举,以将行按顺序移交给分类器。

def accuracy(D, classifier):

for i, item in enumerate(D):

        if classifier(item)==D[i,13]
        #Compare result of classifier with actual value

            x+=1 #Increase x on a hit

acc=(x/D.length)
#Divide x by length of D to calculate hitrate eg. "0.5"; 100% would be "1"

return acc

某处可能存在简单的格式错误,或者我的逻辑中有错误。 (现在距离Python已有2天了) 我想我可能没有正确地比较if。

1 个答案:

答案 0 :(得分:2)

假设同时定义了Dclassifier,那么您的代码中会有一些错误,这些错误都应该给出合理的错误消息(除了float转换之外,使用Python可能会很棘手)。 / p>

您都在if查询中丢失了:,并且试图访问数组D,如D[i, 13],这是不允许的。使用另一组[],如D[i][13]访问2D数组。但是,由于您已经在枚举2D数组,因此不妨使用item[13]来获取值。

最后,如果要在末尾使用十进制值,还需要将至少一个值强制转换为浮点数,例如float(x)/D.length,否则将其舍入为0或1。< / p>

固定代码:

for i, item in enumerate(D):
    if classifier(item) == D[i][13]:
  # if classifier(item) == item[13]: # This should also work, you can use either.
        x += 1 #Increase x on a hit

acc = (float(x)/D.length)
# Divide x by length of D to calculate hitrate eg. "0.5"; 100% would be "1"
return acc