Я пытаюсь построить простую байесовскую сеть, в которой дождь и разбрызгиватель являются родителями мокрой травы, но у каждого дождя и разбрызгивателя по три состояния (тип нечеткой логики, а не два обычных логических), а у мокрой травы два состояния (истина). /ЛОЖЬ). Я нигде не могу найти в документах pymc3, какой синтаксис использовать для описания CPT для этого - я пытаюсь сделать следующее на основе примеров с двумя состояниями, но это не обобщает три состояния, как я думал. Может ли кто-нибудь показать правильный способ сделать это? (А также для более общего случая, когда мокрая трава тоже имеет три состояния.)
rain = mc.Categorical('rain', p = np.array([0.5, 0. ,0.5]))
sprinker = mc.Categorical('sprinkler', p=np.array([0.33,0.33,0.34]))
wetgrass = mc.Categorical('wetgrass',
mc.math.switch(rain,
mc.math.switch(sprinker, 10, 1, -4),
mc.math.switch(sprinker, -20, 1, 3),
mc.math.switch(sprinker, -5, 1, -0.5)))
[выдает ошибку при определении мокрой травы: неправильное количество входных данных для Switch.make_node (получено 4 ((, , , )), ожидается 3)]
Насколько я понимаю, переключатель - это теано-функция, аналогичная (b?a:b) в программе на C; который выполняет только двухстороннее сравнение. Возможно, можно настроить CPT, используя целую кучу таких бинарных переключателей, но я действительно хочу просто дать 3D-матричный CPT в качестве входных данных, как в BNT и других библиотеках байесовских сетей. Возможно ли это в настоящее время?