def entropy_cal(pos,neg):
entropy_target= -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))
return entropy_target
def preprocessing():
# print training
attr_mean = []
for i in range(0,7):
attr_mean.append(np.average(training[:,i]))
neg = 0; pos = 0
for i in range(9999):
if training[i,6] == 0:
neg += 1
else:
pos += 1
entropy_target = entropy_cal(pos, neg)
return entropy_target, attr_mean
File "q3.py", line 46, in preprocessing
entropy_target = entropy_cal(pos, neg)
File "q3.py", line 31, in entropy_cal
return -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))
TypeError: 'float' object has no attribute '__getitem__'
返回变量“entropy_target”时,它会抛出上述错误。有什么建议吗?
答案 0 :(得分:2)
log base 2的语法是:
math.log(pos/(pos+neg), 2)
答案 1 :(得分:0)
def entropy_cal(pos,neg):
entropy_target= -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))
return entropy_target
在上面的代码中,pos
和neg
是非字典值。您正尝试为非字典值执行getitem
。这就是错误的原因。