Déplacement par le tutoriel . Sur les entrées 7 et 8, une erreur s'est produite. 0 modifications apportées.
TypeError Traceback (most recent call last)
<ipython-input-43-c1e53d06d14d> in <module>
----> 1 model.probability(['A', 'B', 'C'])
~/Documents/GitHub/py-bolit/venv/lib/python3.6/site-packages/pomegranate/base.pyx in pomegranate.base.Model.probability()
~/Documents/GitHub/py-bolit/venv/lib/python3.6/site-packages/pomegranate/BayesianNetwork.pyx in pomegranate.BayesianNetwork.BayesianNetwork.log_probability()
TypeError: list indices must be integers or slices, not tuple
liste de points
Package Version
------------------ -------
attrs 19.3.0
backcall 0.1.0
bleach 3.1.0
cycler 0.10.0
decorator 4.4.1
defusedxml 0.6.0
entrypoints 0.3
importlib-metadata 1.3.0
ipykernel 5.1.3
ipython 7.11.1
ipython-genutils 0.2.0
jedi 0.15.2
Jinja2 2.10.3
joblib 0.14.1
json5 0.8.5
jsonschema 3.2.0
jupyter-client 5.3.4
jupyter-core 4.6.1
jupyterlab 1.2.4
jupyterlab-server 1.0.6
kiwisolver 1.1.0
MarkupSafe 1.1.1
matplotlib 3.1.2
mistune 0.8.4
more-itertools 8.0.2
nbconvert 5.6.1
nbformat 5.0.3
networkx 2.4
notebook 6.0.2
numpy 1.18.1
pandas 0.25.3
pandocfilters 1.4.2
parso 0.5.2
pexpect 4.7.0
pickleshare 0.7.5
Pillow 7.0.0
pip 9.0.1
pkg-resources 0.0.0
pomegranate 0.12.0
prometheus-client 0.7.1
prompt-toolkit 3.0.2
ptyprocess 0.6.0
Pygments 2.5.2
pygraphviz 1.5
pyparsing 2.4.6
pyrsistent 0.15.6
python-dateutil 2.8.1
pytz 2019.3
PyYAML 5.3
pyzmq 18.1.1
scipy 1.4.1
seaborn 0.9.0
Send2Trash 1.5.0
setuptools 39.0.1
six 1.13.0
terminado 0.8.3
testpath 0.4.4
tornado 6.0.3
traitlets 4.3.3
watermark 2.0.2
wcwidth 0.1.8
webencodings 0.5.1
wheel 0.33.6
zipp 0.6.0
Python 3.6
Pareil ici
Peut également confirmer ce problème. Passer de la version 0.12.0 à la version 0.11.2 résout ce problème...
Peut également confirmer ce problème. Passer de la version 0.12.0 à la version 0.11.2 résout ce problème...
La rétrogradation résout cela, mais il y a un autre bug...
CODE
from pomegranate import BayesianNetwork, DiscreteDistribution, ConditionalProbabilityTable, Node, State
import matplotlib.pyplot as plt
angina_pectoris = DiscreteDistribution({0: 0.99, 1: 0.01})
heart_attack = DiscreteDistribution({0: 0.99, 1: 0.01})
pain_syndrome = ConditionalProbabilityTable([
[0, 0, 1, 0.01],
[0, 0, 0, 0.99],
[0, 1, 1, 0.9],
[0, 1, 0, 0.1],
[1, 0, 1, 0.9],
[1, 0, 0, 0.1],
[1, 1, 1, 1],
[1, 1, 0, 0],
], [angina_pectoris, heart_attack])
relief_of_pain = ConditionalProbabilityTable([
[0, 0, 'yes', 0.1],
[0, 0, 'not_completely', 0.1],
[0, 0, 'no', 0.1],
[0, 1, 'yes', 0.05],
[0, 1, 'not_completely', 0.35],
[0, 1, 'no', 0.6],
[1, 0, 'yes', 0.9],
[1, 0, 'not_completely', 0.05],
[1, 0, 'no', 0.05],
[1, 1, 'yes', 0.33],
[1, 1, 'not_completely', 0.33],
[1, 1, 'no', 0.33],
], [angina_pectoris, heart_attack])
ps = State(pain_syndrome, name='pain_syndrome')
rp = State(relief_of_pain, name='relief_of_pain')
ap = State(angina_pectoris, name='angina_pectoris')
ha = State(heart_attack, name='heart_attack')
model = BayesianNetwork('Medical decision support system')
model.add_states(ps, rp, ap, ha)
model.add_edge(ap, ps)
model.add_edge(ap, rp)
model.add_edge(ha, ps)
model.add_edge(ha, rp)
model.bake()
model.probability([0, 'yes', 0, 1])
ERREUR
KeyError Traceback (most recent call last)
<ipython-input-19-cfc278c8d52f> in <module>
----> 1 model.probability([0, 'yes', 0, 1])
2
~/Documents/GitHub/py-bolit/venv/lib/python3.6/site-packages/pomegranate/base.pyx in pomegranate.base.Model.probability()
~/Documents/GitHub/py-bolit/venv/lib/python3.6/site-packages/pomegranate/BayesianNetwork.pyx in pomegranate.BayesianNetwork.BayesianNetwork.log_probability()
~/Documents/GitHub/py-bolit/venv/lib/python3.6/site-packages/pomegranate/distributions/ConditionalProbabilityTable.pyx in pomegranate.distributions.ConditionalProbabilityTable.ConditionalProbabilityTable.log_probability()
KeyError: ('0', '1', '0')
@sviperm
Votre erreur semble provenir de vos différents types de données pour les affectations. Je vous suggère de transformer tous les entiers (0,1) en chaînes ('0','1')
Ainsi, c'est un problème différent de celui sur lequel vous êtes tombé initialement
Je recommanderais de faire en sorte que l'entrée de probability
et log_probability
soit toujours en 2D, même lorsqu'il n'y a qu'un seul exemple. J'ai une date limite pour le papier le 30, mais je vais examiner cela peu de temps après. Désolé pour le dérangement.
Grâce à @SebastianBelkner , nous avons eu le problème de l'incompatibilité 0.12 :
La documentation et les exemples model.probability(...)
nécessitent une structure de type tableau (2d).
En regardant l'implémentation v0.11.2, la structure de type tableau a d'abord été convertie en un tableau Numpy, puis accessible via numpyarr[i,j]
:
def log_probability(self, X, n_jobs=1):
<...>
X = numpy.array(X, ndmin=2)
<...>
for i in range(n):
for j, state in enumerate(self.states):
logp[i] += state.distribution.log_probability(X[i, self.idxs[j]])
return logp if n > 1 else logp[0]
La conversion en Numpy a été supprimée ultérieurement. Par conséquent, la manière d'accéder aux valeurs ne fonctionne pas de cette façon. * La conversion préalable du tableau 2d en un tableau Numpy comme argument pour model.probability(...)
résout le problème.
A mon humble avis, il existe deux solutions:
X = numpy.array(X, ndmin=2)
, ouJ'ajouterai le casting en tant que tableau numpy dans la prochaine version. Merci d'avoir compris cela et d'avoir posté une solution temporaire.
Peut également confirmer ce problème. Passer de la version 0.12.0 à la version 0.11.2 résout ce problème...
Cela a vraiment résolu mon problème. Si vous utilisez Kaggle, installez grenade dans la première cellule en utilisant la commande suivante "!pip install grenade==0.11.2"
Passer dans un seul vecteur génère maintenant une erreur. Vous devez passer une matrice 2D ou une liste de listes (même s'il n'y a qu'un seul exemple). Dans la v0.12.1, print(model.probability([[0, 'yes', 0, 1]]))
renverra 4.95e-5
, ce qui ressemble à la bonne réponse.
@jmschrei Pour la version actuelle, ni la liste ni la liste des listes ne fonctionnent. Y a-t-il déjà des changements dans le code source ou l'exemple sera-t-il mis à jour ?
v0.12.1 aura le correctif. Je publierai ça bientôt. Pour l'instant, passez un tableau numpy 2D et cela devrait fonctionner.