Нахождение условной взаимной информации из 3 дискретных переменных - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь найти условную взаимную информацию между тремя дискретными случайными величинами, используя пакет pyitlib для python с помощью формулы:

I(X;Y|Z)=H(X|Z)+H(Y|Z)-H(X,Y|Z)

Ожидаемое значение условной взаимной информации = 0,011

.

Мой 1-й код:

import numpy as np
from pyitlib import discrete_random_variable as drv

X=[0,1,1,0,1,0,1,0,0,1,0,0]
Y=[0,1,1,0,0,0,1,0,0,1,1,0]
Z=[1,0,0,1,1,0,0,1,1,0,0,1]

a=drv.entropy_conditional(X,Z)
##print(a)
b=drv.entropy_conditional(Y,Z)
##print(b)
c=drv.entropy_conditional(X,Y,Z)
##print(c)

p=a+b-c
print(p)

Ответ, который я здесь получаю, = 0,4632245116328402

Мой второй код:

import numpy as np
from pyitlib import discrete_random_variable as drv

X=[0,1,1,0,1,0,1,0,0,1,0,0]
Y=[0,1,1,0,0,0,1,0,0,1,1,0]
Z=[1,0,0,1,1,0,0,1,1,0,0,1]

a=drv.information_mutual_conditional(X,Y,Z)
print(a)

Ответ, который я здесь получаю, = 0.1583445441575102

В то время как ожидаемый результат 1018 * равен 0,011

Кто-нибудь может помочь? У меня сейчас большие проблемы. Любая помощь будет заметна. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Основываясь на определениях условной энтропии, вычисляя в битах (то есть основание 2), я получаю H (X | Z) = 0,784159, H (Y | Z) = 0,325011, H (X, Y | Z) = 0,950826.На основании приведенного выше определения условной взаимной информации я получаю I (X; Y | Z) = H (X | Z) + H (Y | Z) -H (X, Y | Z) = 0,158344.Принимая во внимание, что pyitlib использует базу 2 по умолчанию, drv.information_mutual_conditional (X, Y, Z), по-видимому, вычисляет правильный результат.

Обратите внимание, что вы используете drv.entropy_conditional (X, Y, Z) в вашемпервый пример для вычисления условной энтропии неверен, однако вы можете использовать drv.entropy_conditional (XY, Z), где XY - это одномерный массив, представляющий совместные наблюдения о X и Y, например, XY = [2 * xy [0] + xy[1] для xy в zip (X, Y)].

1 голос
/ 29 марта 2019

Если вы открыты для использования SKlearn, вы можете взглянуть на adjusted_mutual_info_score инструмент здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...