Beispiel #1
0
        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);
        }
Beispiel #2
0
 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;
         }
     }
 }