private void BuildRuleTree(Rule rule, IForecastingDataSets datasets)
 {
     if (rule.Type == RuleType.Interior)
     {
         if (rule.LeftChild != null)
         {
             BuildRuleTree(rule.LeftChild, datasets);
         }
         if (rule.RightChild != null)
         {
             BuildRuleTree(rule.RightChild, datasets);
         }
     }
     else
     {
         IForecastingDataSets extracted = ExtractSubSets(rule.InheritedSplitLocations.ToArray(),
                                                         rule.InheritedSplitValues.ToArray(), datasets, rule.Type);
         ModelParameter mp = new ModelParameter();
         if (extracted.Length > 0)
         {
             MLRModel mlr = new MLRModel(mp);
             mlr.Train(extracted);
             rule.Model = mlr;
         }
     }
 }
Exemple #2
0
        public static IForecastingModel CreateForecastingModel(string name)
        {
            IForecastingModel model = null;

            switch (name)
            {
            case "Artificial Neural Network":
                AnnModelParameter annPara = new AnnModelParameter();
                model = new NeuralNetworkModel(annPara);
                break;

            case "HIGANN":
                AnnModelParameter annPara1 = new AnnModelParameter();
                model = new NeuralNetworkModel(annPara1);
                break;

            case "Support Vector Machine":
                Heiflow.AI.SVM.Parameter p = new Heiflow.AI.SVM.Parameter();
                model = new SVMModel(p);
                break;

            case "Multiple Linear Regression":
                ModelParameter mp = new ModelParameter();
                model = new MLRModel(mp);
                break;

            case "Genetic Programming":
                GPModelParameter para = new GPModelParameter();
                model = new GPModel(para);
                break;

            case "Model Tree":
                Rule root  = new Rule(5, 0.47035, RuleType.Interior);
                Rule right = new Rule(RuleType.RightLeaf);
                root.RightChild = right;
                Rule left = new Rule(5, 0.30445, RuleType.Interior);
                root.LeftChild = left;
                Rule left1 = new Rule(RuleType.LeftLeaf);
                left.LeftChild = left1;
                Rule right1 = new Rule(9, 0.156, RuleType.Interior);
                left.RightChild = right1;

                Rule right1_left = new Rule(RuleType.LeftLeaf);
                right1.LeftChild = right1_left;

                Rule right1_right = new Rule(RuleType.RightLeaf);
                right1.RightChild = right1_right;

                HybridModelParameter hmp = new HybridModelParameter(root);
                model = new HybridModel(hmp);
                break;
            }
            return(model);
        }
        public override double Forecast(double[] inputVector)
        {
            HybridModelParameter hmp = mParameter as HybridModelParameter;
            MLRModel             mlr = hmp.CurrentLeafRule.Model as MLRModel;

            if (mlr != null)
            {
                double y = 0;
                for (int i = 0; i < inputVector.Length; i++)
                {
                    y += inputVector[i] * mlr.RegressionCoefficients[i];
                }
                return(y);
            }
            else
            {
                return(0);
            }
        }