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

问题描述 投票:0回答:1

我有一个包含狗及其健康状况的数组“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天)我想如果正确比较,我可能不会这样做。

python classification
1个回答
2
投票

假设定义了Dclassifier,你的代码中会有一些错误,它们都应该给出合理的错误消息(除了浮动转换,使用python可能会很棘手)。

您在if-query中都缺少:,并且您正试图访问D这样的数组D[i, 13],这是不允许的。用另一组[]访问2D数组,如D[i][13]。但是,由于您已经枚举了2D数组,因此您也可以使用item[13]来获取值。

最后,如果你想在最后得到一个十进制值,你还需要将至少一个值转换为浮点数,如float(x)/D.length,否则它只会将其舍入为0或1。

固定代码:

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
© www.soinside.com 2019 - 2024. All rights reserved.