public iFourmi.DataMining.Model.IClassifier CreateClassifier() { Solution <Edge> solution = new Solution <Edge>(); CyclicRelationInvalidator invalidator = new CyclicRelationInvalidator(); invalidator.MaxDependencies = 1; ConstructionGraph <Edge> constructionGraph = ConstructionGraphBuilder.BuildBNConstructionGraph(this._trainingset.Metadata); CMICalculator cmiCalculator = new CMICalculator(); cmiCalculator.Dataset = this._trainingset; constructionGraph.SetHeuristicValues(cmiCalculator, false); List <DecisionComponent <Edge> > components = constructionGraph.Components.OrderByDescending(e => e.Heuristic).ToList(); while (components.Count != 0) { DecisionComponent <Edge> component = components[0]; solution.Components.Add(component); invalidator.Invalidate(component, solution, constructionGraph); components = constructionGraph.Components.Where(e => e.IsValid).OrderByDescending(e => e.Heuristic).ToList(); } BayesianNetworkClassifier BNClassifier = new BayesianNetworks.Model.BayesianNetworkClassifier(this._trainingset.Metadata, solution.ToList()); BNClassifier.LearnParameters(this._trainingset); return(BNClassifier); }
public void Invalidate(DecisionComponent <int> component, Solution <int> solution, ConstructionGraph <int> graph) { graph.Components[component.Index].IsValid = false; if (solution.Components.Count == this._clustersNumber) { foreach (DecisionComponent <int> current in graph.Components) { current.IsValid = false; } } }