Je cherche l'outil le plus approprié pour python3.x sous Windows pour créer un réseau bayésien, connaître ses paramètres à partir de données et effectuer l'inférence.
La structure du réseau que je veux définir moi-même comme suit:
Il est tiré de this paper.
Toutes les variables sont discrètes (et ne peuvent prendre que 2 états possibles) à l'exception de "Size" et "GraspPose", qui sont continues et doivent être modélisées comme étant un mélange de Gaussiennes.
Les auteurs utilisent l'algorithme Expectation-Maximization pour apprendre les paramètres des tables de probabilités conditionnelles et l'algorithme Junction-Tree pour calculer l'inférence exacte.
Si je comprends bien, tout est réalisé dans MatLab avec Bayes Net Toolbox de Murphy.
J'ai essayé de chercher quelque chose de similaire en python et voici mes résultats:
PyMC semble être un module puissant, mais je ne parviens pas à l'importer sous Windows 64, python 3.3. Je reçois une erreur en installant la version de développement
AVERTISSEMENT (theano.configdefaults): g ++ non détecté! Theano sera incapable d'exécuter des implémentations C optimisées (pour le processeur et le processeur graphique) et utilisera par défaut les implémentations Python. Les performances seront sévèrement dégradées. Pour supprimer cet avertissement, définissez Theano flags cxx sur une chaîne vide.
METTRE À JOUR:
Tous les conseils et exemples concrets seront très appréciés.
Il semble que pomegranate a récemment été mis à jour pour inclure les réseaux bayésiens. Je n'ai pas essayé moi-même, mais l'interface a l'air sympa et sklearn-ish.
En retard pour la fête, comme toujours, mais j'ai bouclé l'API Java de BayesServer en utilisant JPype; il ne possède peut-être pas toutes les fonctionnalités dont vous avez besoin, mais vous créerez le réseau ci-dessus à l'aide de quelque chose comme:
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)
Je ne suis pas affilié à Bayes Server - et l'encapsuleur Python n'est pas "officiel" (vous pouvez utiliser l'API Java directement via Python). Mon wrapper fait des suppositions et impose des limitations sur des fonctions que je n'utilise pas beaucoup. Le dépôt est ici: github.com/morganics/bayesianpy
Je cherchais une bibliothèque similaire et j'ai trouvé que la grenade était bonne. Merci James Atwood
Voici un exemple d'utilisation.
from pomegranate import *
import numpy as np
mydb=np.array([[1,2,3],[1,2,4],[1,2,5],[1,2,6],[1,3,8],[2,3,8],[1,2,4]])
bnet = BayesianNetwork.from_samples(mydb)
print(bnet.node_count())
print(bnet.probability([[1,2,3]]))
print (bnet.probability([[1,2,8]]))
Pour le problème g ++ de pymc, je vous recommande vivement de terminer l’installation de g ++, cela augmenterait considérablement le processus d’échantillonnage, sinon vous devrez vivre avec cet avertissement et rester pendant une heure pendant un échantillonnage de 2000.
Pour résoudre le problème, procédez comme suit: 1. installez g ++, téléchargez cywing et installez g ++, vous pouvez le rechercher sur Google. Pour vérifier cela, allez simplement dans "cmd" et tapez "g ++", s'il est écrit "nécessite un fichier d'entrée", tant mieux, vous aurez g ++ installé . 2. installez le paquet python: mingw, libpython 3. installer le paquet python: theano
cela devrait résoudre ce problème.
Je travaille actuellement sur le même problème avec vous, bonne chance!