web-dev-qa-db-fra.com

Créer un réseau bayésien et apprendre les paramètres avec Python3.x

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: enter image description here

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:

  1. Python Bayesian Network Toolbox http://sourceforge.net/projects/pbnt.berlios/ ( http://pbnt.berlios.de/ ). Le site Web ne fonctionne pas, le projet ne semble pas être pris en charge. 
  2. BayesPy https://github.com/bayespy/bayespy Je pense que c'est ce dont j'ai réellement besoin, mais je ne parviens pas à trouver des exemples similaires à mon cas, à comprendre comment aborder la construction de la structure du réseau .
  3. 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:

  1. libpgm ( http://pythonhosted.org/libpgm/ ). Exactement ce dont j'ai besoin, malheureusement pas supporté par python 3.x
  2. Très intéressante bibliothèque en développement actif: PGMPY. Malheureusement, les variables continues et l'apprentissage à partir des données ne sont pas encore pris en charge. https://github.com/pgmpy/pgmpy/

Tous les conseils et exemples concrets seront très appréciés.

20
Spu

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.

7
James Atwood

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

0
Ian

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]]))
0
Mohammed

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!

0
Teng Fu