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; } } }
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); } }