我有一个包含狗及其健康状况的数组“D”。分类器()方法返回 1 或 0,并将二维数组的一行作为输入。我想将分类器结果与二维数组的第 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 hitacc=(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 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
假设D和classifier都已定义,则您的代码中存在一些错误,这些错误都应该给出合理的错误消息(除了浮点转换,python 可能会很棘手)。
你们都缺少一个:作为你试图访问数组中,如果查询,以及D像D[i, 13]这是不允许的。二维数组是用另一组 访问的[],比如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
添加回答
举报
0/150
提交
取消