Я пытаюсь представить следующую сеть, используя код C # на сервере Байеса. В сети узлы Prior
и «Знание» в моей сети являются непрерывными, имеют значения вероятности от 0 до 1, а узел вопроса дискретен, имеет только два состояния, правильные или неправильные (то есть, правильно или неправильно дан ответ на вопрос) ,
Сеть реализована следующим образом в моем скрипте.
// numberOfDistractors and levelId will be used later for added complexity in modeling
void InitializeNetworkForLevel(int numberOfDistractors, int levelId)
{
beliefnet = new BayesServer.Network();
// add an intial knowledge node
priorKnowledge = new Variable("PriorKnowledge", VariableValueType.Continuous, VariableKind.Probability);
// initialize the priorKnowledge value to 0.5 if level = 1, else set it to learn rate (may be here, or in the queryNetwork method)
priorKnowledgeNode = new Node("Prior", priorKnowledge);
beliefnet.Nodes.Add(priorKnowledgeNode);
// add a knowledge node which is a latent variable (parameter to be learned from observed values
learnRate = new Variable("LearnRate", VariableValueType.Continuous, VariableKind.Probability);
knowledgeNode = new Node("Knowledge", learnRate);
beliefnet.Nodes.Add(knowledgeNode);
// add a link from prior node to knowledge node
beliefnet.Links.Add(new Link(priorKnowledgeNode, knowledgeNode));
// add a question node, which denotes the oberved variable whether the question is answered correctly or not
// this node has two states, namely correct or incorrect
State correct = new State("Correct");
State inCorrect = new State("Inorrect");
questionNode = new Node("Question", correct, inCorrect);
beliefnet.Nodes.Add(questionNode);
// add a link from knowledge node to question node
beliefnet.Links.Add(new Link(knowledgeNode, questionNode));
// We will use the RelevanceTree algorithm here, as it is optimized for parameter learning
learning = new ParameterLearning(beliefnet, new RelevanceTreeInferenceFactory());
learningOptions = new ParameterLearningOptions();
QueryNetwork(true);
}
Однако я не позволяю создавать сеть, говоря, что узлы с непрерывными переменными не могут иметь дочерние узлы с дискретной переменной, и прося меня дискретизировать эти непрерывные узлы. Однако сеть такая, какая есть, и я не уверен, что смогу ее изменить. Как мне это сделать?
ArgumentException: узлы, содержащие непрерывные переменные, не могут
иметь дочерние узлы, содержащие любые дискретные переменные. Вместо этого ссылка
можно поменять местами (при необходимости) или добавить скрытого дискретного родителя
и вместо этого, или непрерывная переменная может быть дискретизирована.
BayesServer.NetworkLinkCollection. (BayesServer.Link) (в
: 0)
BayesServer.NetworkLinkCollection.Insert (индекс System.Int32,
BayesServer.Link item) (в: 0)
BayesServer.NetworkLinkCollection.Add (элемент BayesServer.Link) (в
: 0)
BayesNet.InitializeNetworkForLevel (System.Int32 numberOfDistractors,
System.Int32 levelId) (в разделе Активы / Сценарии / BayesNet.cs: 57)
BayesNet.Start () (в разделе Активы / Сценарии / BayesNet.cs: 22)