public static BayesianNetwork ToBayesianNetwork(this JObject json) { string networkName = json["name"].Value <string>(); var bn = new BayesianNetwork(networkName); // Load variables and note parents. var variableList = new List <string>(); var parentsList = new Dictionary <string, string[]>(); foreach (var jrv in json.Property("variables").Value) { var rv = ToRandomVariable(jrv); bn.AddVariable(rv); variableList.Add(rv.Name); parentsList.Add(rv.Name, jrv["parents"].Values <string>().ToArray()); } // Reparent. foreach (var rv in variableList) { string[] parents = parentsList[rv]; foreach (var parentName in parents) { bn.ConnectVariables(parentName, rv); } } return(bn); }
public static BayesianNetwork ToBayesianNetwork(this JObject json) { string networkName = json["name"].Value<string>(); var bn = new BayesianNetwork(networkName); // Load variables and note parents. var variableList = new List<string>(); var parentsList = new Dictionary<string, string[]>(); foreach (var jrv in json.Property("variables").Value) { var rv = ToRandomVariable(jrv); bn.AddVariable(rv); variableList.Add(rv.Name); parentsList.Add(rv.Name, jrv["parents"].Values<string>().ToArray()); } // Reparent. foreach (var rv in variableList) { string[] parents = parentsList[rv]; foreach (var parentName in parents) { bn.ConnectVariables(parentName, rv); } } return bn; }
protected void DoLearning(LearningTask learningTask) { if (learningTask.LearningState == ComputationState.Done) { return; } // Grab options. var options = learningTask.Options; // Grab training set. var trainingSet = learningTask.TrainingSet; // Grab variable names. var firstObservation = learningTask.TrainingSet.First(); var variableNames = firstObservation.VariableNames; // Build a starter Bayesian network. var bn = new BayesianNetwork(learningTask.TrainingSet.Name); // Build variables for each variable in the training set. foreach (var variableName in variableNames) { var space = trainingSet.Variables.TryFind(variableName).Value; var rv = new RandomVariable(variableName, space); bn.AddVariable(rv); } // Store in task so that task can send updates to its listeners. learningTask.BayesianNetwork = bn; learningTask.LearningState = ComputationState.Computing; // Build Dirichlet parameters IDictionary<string, DirichletDistribution> priors = new Dictionary<string, DirichletDistribution>(); foreach (var variableName in variableNames) { var space = trainingSet.Variables.TryFind(variableName).Value; DirichletDistribution prior; if (options.DistributionDirichletAlpha > 0) { prior = new DirichletDistribution(); foreach (var value in space.Values) { prior.SetParameter(value, options.DistributionDirichletAlpha); } priors[variableName] = prior; } } // Initialize a sufficient statistics. SufficientStatistics sufficientStatistics = new SufficientStatistics(trainingSet, Utils.Some(priors)); // Learn structure. switch (options.Structure) { case LearningOptions.StructureEnum.DisconnectedStructure: break; case LearningOptions.StructureEnum.RandomStructure: bn.GenerateStructure( StructureClass.Random, Utils.Some(options.StructureSeed), Utils.Some(options.StructureParentLimit)); break; case LearningOptions.StructureEnum.TreeStructure: bn.LearnStructure( sufficientStatistics, StructureClass.Tree, Utils.None<int>(), Utils.None<int>()); break; case LearningOptions.StructureEnum.GeneralStructure: bn.LearnStructure( sufficientStatistics, StructureClass.General, Utils.None<int>(), Utils.Some(options.StructureParentLimit)); break; } // Learn distributions. bn.LearnDistributions(sufficientStatistics); // Done. learningTask.LearningState = ComputationState.Done; }
protected void DoLearning(LearningTask learningTask) { if (learningTask.LearningState == ComputationState.Done) { return; } // Grab options. var options = learningTask.Options; // Grab training set. var trainingSet = learningTask.TrainingSet; // Grab variable names. var firstObservation = learningTask.TrainingSet.First(); var variableNames = firstObservation.VariableNames; // Build a starter Bayesian network. var bn = new BayesianNetwork(learningTask.TrainingSet.Name); // Build variables for each variable in the training set. foreach (var variableName in variableNames) { var space = trainingSet.Variables.TryFind(variableName).Value; var rv = new RandomVariable(variableName, space); bn.AddVariable(rv); } // Store in task so that task can send updates to its listeners. learningTask.BayesianNetwork = bn; learningTask.LearningState = ComputationState.Computing; // Build Dirichlet parameters IDictionary <string, DirichletDistribution> priors = new Dictionary <string, DirichletDistribution>(); foreach (var variableName in variableNames) { var space = trainingSet.Variables.TryFind(variableName).Value; DirichletDistribution prior; if (options.DistributionDirichletAlpha > 0) { prior = new DirichletDistribution(); foreach (var value in space.Values) { prior.SetParameter(value, options.DistributionDirichletAlpha); } priors[variableName] = prior; } } // Initialize a sufficient statistics. SufficientStatistics sufficientStatistics = new SufficientStatistics(trainingSet, Utils.Some(priors)); // Learn structure. switch (options.Structure) { case LearningOptions.StructureEnum.DisconnectedStructure: break; case LearningOptions.StructureEnum.RandomStructure: bn.GenerateStructure( StructureClass.Random, Utils.Some(options.StructureSeed), Utils.Some(options.StructureParentLimit)); break; case LearningOptions.StructureEnum.TreeStructure: bn.LearnStructure( sufficientStatistics, StructureClass.Tree, Utils.None <int>(), Utils.None <int>()); break; case LearningOptions.StructureEnum.GeneralStructure: bn.LearnStructure( sufficientStatistics, StructureClass.General, Utils.None <int>(), Utils.Some(options.StructureParentLimit)); break; } // Learn distributions. bn.LearnDistributions(sufficientStatistics); // Done. learningTask.LearningState = ComputationState.Done; }