Ответ 1
Похоже, pomegranate был недавно обновлен, чтобы включить Bayesian Networks. Я сам не пробовал, но интерфейс выглядит красиво и sklearn-ish.
Я ищу наиболее подходящий инструмент для python3.x для Windows, чтобы создать Bayesian Network, узнать его параметры из данных и выполнить вывод.
Я хочу определить структуру сети следующим образом:
Из этот документ.
Все переменные дискретны (и могут принимать только 2 возможных состояния), за исключением "Размер" и "GraspPose", которые являются непрерывными и должны быть смоделированы как смесь гауссиан.
Авторы используют алгоритм ожидания-максимизации, чтобы узнать параметры для таблиц условной вероятности и алгоритм Junction-Tree для вычисления точного вывода.
Как я понимаю, все реализовано в MatLab с помощью Bayes Net Toolbox от Murphy.
Я попытался найти что-то подобное в python, и вот мои результаты:
PyMC кажется мощным модулем, но у меня проблемы с импортом его в Windows 64, python 3.3. Я получаю ошибку при установке версии разработки
ПРЕДУПРЕЖДЕНИЕ (theano.configdefaults): g++ не обнаружено! Theano не сможет выполнить оптимизированные C-реализации (как для CPU, так и для GPU) и по умолчанию будет реализовывать Python. Производительность будет сильно ухудшена. Чтобы удалить это предупреждение, установите флаги Theano cxx в пустую строку.
UPDATE:
Любые советы и конкретные примеры будут высоко оценены.
Похоже, pomegranate был недавно обновлен, чтобы включить Bayesian Networks. Я сам не пробовал, но интерфейс выглядит красиво и sklearn-ish.
В случае проблемы с pymc g++ я настоятельно рекомендую выполнить установку g++, это значительно увеличит процесс выборки, иначе вам придется жить с этим предупреждением и сидеть там в течение 1 часа для процесса выборки 2000 года.
Способ устранения предупреждения: 1. Установите g++, загрузите cywing и получите g++ install, вы можете это сделать Google. Чтобы проверить это, просто перейдите в "cmd" и введите "g++", если он говорит "требуется входной файл", отлично, вы установили g++. 2. установить пакет python: mingw, libpython 3. установить пакет python: theano
это должно устранить эту проблему.
В настоящее время я работаю над той же проблемой, удачи!
Поздно к вечеринке, как всегда, но я завернул Java API BayesServer с помощью JPype; он может не иметь всех необходимых функций, но вы создали бы такую сеть, используя что-то вроде:
from bayesianpy.network import Builder as builder
import bayesianpy.network
nt = bayesianpy.network.create_network()
# where df is your dataframe
task = builder.create_discrete_variable(nt, df, 'task')
size = builder.create_continuous_variable(nt, 'size')
grasp_pose = builder.create_continuous_variable(nt, 'GraspPose')
builder.create_link(nt, size, grasp_pose)
builder.create_link(nt, task, grasp_pose)
for v in ['fill level', 'object shape', 'side graspable']:
va = builder.create_discrete_variable(nt, df, v)
builder.create_link(nt, va, grasp_pose)
builder.create_link(nt, task, va)
# write df to data store
with bayesianpy.data.DataSet(df, bayesianpy.utils.get_path_to_parent_dir(__file__), logger) as dataset:
model = bayesianpy.model.NetworkModel(nt, logger)
model.train(dataset)
# to query model multi-threaded
results = model.batch_query(dataset, [bayesianpy.model.QueryModelStatistics()], append_to_df=False)
Я не связан с Bayes Server, а оболочка Python не является официальной (вы можете напрямую использовать Java API через Python). Моя обложка делает некоторые предположения и помещает ограничения на функции, которые я не очень использую. Репо находится здесь: github.com/morganics/bayesianpy