コード例 #1
0
        private ISymbolicExpressionTreeNode GenTreeShiftStdDist(string variable, double m_org, double s_org, double m_tar, double s_tar)
        {
            // x - m_org
            var substractionNode = new Subtraction().CreateTreeNode();
            var xNode            = CreateVariableTreeNode(variable, "x");
            var m_orgNode        = CreateConstantTreeNode("m_org", m_org);

            substractionNode.AddSubtree(xNode);
            substractionNode.AddSubtree(m_orgNode);

            // (x - m_org) / s_org
            var divisionNode = new Division().CreateTreeNode();
            var s_orgNode    = CreateConstantTreeNode("s_org", s_org);

            divisionNode.AddSubtree(substractionNode);
            divisionNode.AddSubtree(s_orgNode);

            // ((x - m_org) / s_org ) * s_tar
            var multiplicationNode = new Multiplication().CreateTreeNode();
            var s_tarNode          = CreateConstantTreeNode("s_tar", s_tar);

            multiplicationNode.AddSubtree(divisionNode);
            multiplicationNode.AddSubtree(s_tarNode);

            // ((x - m_org) / s_org ) * s_tar + m_tar
            var additionNode = new Addition().CreateTreeNode();
            var m_tarNode    = CreateConstantTreeNode("m_tar", m_tar);

            additionNode.AddSubtree(multiplicationNode);
            additionNode.AddSubtree(m_tarNode);

            return(additionNode);
        }
コード例 #2
0
        public static ISymbolicExpressionTree CreateTree(string[] variableNames, int[] lags, double[] coefficients,
                                                         double @const = 0)
        {
            if (variableNames.Length == 0 ||
                variableNames.Length != coefficients.Length ||
                variableNames.Length != lags.Length)
            {
                throw new ArgumentException("The length of the variable names, lags, and coefficients vectors must match");
            }

            ISymbolicExpressionTree     tree      = new SymbolicExpressionTree(new ProgramRootSymbol().CreateTreeNode());
            ISymbolicExpressionTreeNode startNode = new StartSymbol().CreateTreeNode();

            tree.Root.AddSubtree(startNode);
            ISymbolicExpressionTreeNode addition = new Addition().CreateTreeNode();

            startNode.AddSubtree(addition);

            for (int i = 0; i < variableNames.Length; i++)
            {
                if (lags[i] == 0)
                {
                    VariableTreeNode vNode = (VariableTreeNode) new Variable().CreateTreeNode();
                    vNode.VariableName = variableNames[i];
                    vNode.Weight       = coefficients[i];
                    addition.AddSubtree(vNode);
                }
                else
                {
                    LaggedVariableTreeNode vNode = (LaggedVariableTreeNode) new LaggedVariable().CreateTreeNode();
                    vNode.VariableName = variableNames[i];
                    vNode.Weight       = coefficients[i];
                    vNode.Lag          = lags[i];
                    addition.AddSubtree(vNode);
                }
            }

            if ([email protected](0.0))
            {
                ConstantTreeNode cNode = (ConstantTreeNode) new Constant().CreateTreeNode();
                cNode.Value = @const;
                addition.AddSubtree(cNode);
            }
            return(tree);
        }
コード例 #3
0
        // helper

        private ISymbolicExpressionTreeNode GenerateModelForLinearTransformation()
        {
            var linearTransformation = (LinearTransformation)transformation;
            var kValue = linearTransformation.Multiplier;
            var dValue = linearTransformation.Addend;

            // k * x
            var multiplicationNode = new Multiplication().CreateTreeNode();
            var kNode = CreateConstantTreeNode("k", kValue);
            var xNode = CreateVariableTreeNode(column, "x");

            multiplicationNode.AddSubtree(kNode);
            multiplicationNode.AddSubtree(xNode);

            // ( k * x ) + d
            var additionNode = new Addition().CreateTreeNode();
            var dNode        = CreateConstantTreeNode("d", dValue);

            additionNode.AddSubtree(multiplicationNode);
            additionNode.AddSubtree(dNode);

            return(additionNode);
        }
コード例 #4
0
        public static ISymbolicExpressionTree CreateTree(IEnumerable <KeyValuePair <string, IEnumerable <string> > > factors,
                                                         double[] factorCoefficients,
                                                         double @const = 0)
        {
            ISymbolicExpressionTree     tree      = new SymbolicExpressionTree(new ProgramRootSymbol().CreateTreeNode());
            ISymbolicExpressionTreeNode startNode = new StartSymbol().CreateTreeNode();

            tree.Root.AddSubtree(startNode);
            ISymbolicExpressionTreeNode addition = new Addition().CreateTreeNode();

            startNode.AddSubtree(addition);

            int i = 0;

            foreach (var factor in factors)
            {
                var varName = factor.Key;
                foreach (var factorValue in factor.Value)
                {
                    var node = (BinaryFactorVariableTreeNode) new BinaryFactorVariable().CreateTreeNode();
                    node.VariableValue = factorValue;
                    node.VariableName  = varName;
                    node.Weight        = factorCoefficients[i];
                    addition.AddSubtree(node);
                    i++;
                }
            }

            if ([email protected](0.0))
            {
                ConstantTreeNode cNode = (ConstantTreeNode) new Constant().CreateTreeNode();
                cNode.Value = @const;
                addition.AddSubtree(cNode);
            }
            return(tree);
        }
コード例 #5
0
    private static ISymbolicRegressionSolution CreateSymbolicSolution(List<IRegressionModel> models, double nu, IRegressionProblemData problemData) {
      var symbModels = models.OfType<ISymbolicRegressionModel>();
      var lowerLimit = symbModels.Min(m => m.LowerEstimationLimit);
      var upperLimit = symbModels.Max(m => m.UpperEstimationLimit);
      var interpreter = new SymbolicDataAnalysisExpressionTreeLinearInterpreter();
      var progRootNode = new ProgramRootSymbol().CreateTreeNode();
      var startNode = new StartSymbol().CreateTreeNode();

      var addNode = new Addition().CreateTreeNode();
      var mulNode = new Multiplication().CreateTreeNode();
      var scaleNode = (ConstantTreeNode)new Constant().CreateTreeNode(); // all models are scaled using the same nu
      scaleNode.Value = nu;

      foreach (var m in symbModels) {
        var relevantPart = m.SymbolicExpressionTree.Root.GetSubtree(0).GetSubtree(0); // skip root and start
        addNode.AddSubtree((ISymbolicExpressionTreeNode)relevantPart.Clone());
      }

      mulNode.AddSubtree(addNode);
      mulNode.AddSubtree(scaleNode);
      startNode.AddSubtree(mulNode);
      progRootNode.AddSubtree(startNode);
      var t = new SymbolicExpressionTree(progRootNode);
      var combinedModel = new SymbolicRegressionModel(problemData.TargetVariable, t, interpreter, lowerLimit, upperLimit);
      var sol = new SymbolicRegressionSolution(combinedModel, problemData);
      return sol;
    }