c'est la bonne affaire. J'ai donc créé un BN suivant les instructions du manuel BNT, c'est le sprinkler mais j'ai ajouté un nœud Class pour l'hiver et l'été. Comme ceci:Bayes Réseau pour la classification en Matlab (BNT)
Cloudy------ / \ | Sprinkler Rain | \ / | | Wet Class
Où la classe dépend seulement de si elle est trouble ou s'il pleut. Avec la même spécification que http://bnt.googlecode.com/svn/trunk/docs/usage.html#basics
Et la classe est aussi binaire, la table est:
C R Class prob --------------- 1 1 1 0 2 1 1 0.4 1 2 1 0.4 2 2 1 0.9 etc.
donc ma question en utilisant la var_elimination_eng parce que pour une raison jtree ne fonctionne pas, je reçois ce le marg.T après avoir entré la preuve de la pluie:
ans =
0.800000000000000
0.200000000000000
Est-ce correct? Ai-je mis en œuvre ok? Ou ai-je oublié quelque chose? Merci.
hypothèse même 1 = false = hiver, 2 = true = été
EDIT:
Alors oui le CPT du nœud de classe est de 8 entrées
C R Class prob --------------- 1 1 1 0 2 1 1 0.4 1 2 1 0.4 2 2 1 0.9 1 1 2 1 2 1 2 0.6 1 2 2 0.6 2 2 2 0.6 2 2 2 0.1
Ce sont 1 - oposite . Le code est:
N = 5
dag = zeros(N,N)
C = 1; S = 2; R = 3; W = 4; Class = 5
dag(C, [S R]) = 1
dag(R, W) = 1
dag(S, W) = 1
dag(C, Class) = 1
dag(R, Class) = 1
discrete_nodes = 1:N
nodes_size = 2*ones(1,N)
bnet = mk_bnet(dag, nodes_size, names, {'Clody', 'S', 'R', 'W', 'Class'}, 'discrete', discrete_nodes)
bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5])
bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8])
bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1])
bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99])
bnet.CPD{Class} = tabular_CPD(bnet, Class, [0 0.4 0.4 0.9 1 0.6 0.6 0.1])
evidence = cell(1, N)
evidence{R} = 2
engine = var_elim_inf_engine(bnet)
[engine loglik] = enter_evidence(engine, evidence)
marg = marginal_nodes(engine, R)
marg = marginal_nodes(engine, Class)
marg.T
Ce code je, comme pour le jtree, il me donnait une erreur sur Matlab qui a disparu, mais, je pense que Elimin variable est plus facile à comprendre que je lis maintenant.
Merci.
J'ai modifié. Merci. –
Oui, votre code semble correctement mis en œuvre. Maintenant, les choses commencent à devenir un peu plus compliquées lorsque vous devez apprendre les CPT à partir des données (au lieu de les nommer manuellement), en particulier dans les cas où il y a des données manquantes.Mais ce n'est pas votre problème pour le moment :) – Rhubarb
Non, pas maintenant, mais qu'est-ce que vous voulez dire un peu plus compliqué? Comment? J'aurais cependant pensé que cela devrait être plus facile puisque vous avez les données, et vous pouvez simplement les lisser pour tenir compte des données manquantes. –