Я реализовал mutual information формулы питона с помощью pandas
и numpy
Вычисления взаимной информации в питоне возвращает нана
def mutual_info(p):
p_x=p.sum(axis=1)
p_y=p.sum(axis=0)
I=0.0
for i_y in p.index:
for i_x in p.columns:
I+=(p.ix[i_y,i_x]*np.log2(p.ix[i_y,i_x]/(p_x[i_y]*p[i_x]))).values[0]
return I
Однако, если клетка в p
имеет нулевую вероятность, то np.log2(p.ix[i_y,i_x]/(p_x[i_y]*p[i_x]))
является отрицательной бесконечностью, и целое выражение умножается на ноль и возвращает NaN
.
Каков правильный способ обойти это?
Не можете ли вы проверить, нет ли нуля в p, и в этом случае вернуть значение, которое вы ожидаете для этого случая? – timgeb
Я понятия не имею, что такое энтропия нулевой вероятности –
, может быть, кто-то здесь знает –