protected PrincipleComponentTransformation(PrincipleComponentTransformation original, Cloner cloner)
 {
     if (original.Variances != null)
     {
         Variances = original.Variances.ToArray();
     }
     if (original.VariableNames != null)
     {
         VariableNames = original.VariableNames.ToArray();
     }
     if (original.Deviations != null)
     {
         Deviations = original.Deviations.ToArray();
     }
     if (original.Means != null)
     {
         Means = original.Means.ToArray();
     }
     if (original.Matrix == null)
     {
         return;
     }
     Matrix = new double[original.Matrix.GetLength(0), original.Matrix.GetLength(1)];
     for (var i = 0; i < original.Matrix.GetLength(0); i++)
     {
         for (var j = 0; j < original.Matrix.GetLength(1); j++)
         {
             Matrix[i, j] = original.Matrix[i, j];
         }
     }
 }
        public static PrincipleComponentTransformation CreateProjection(IDataset dataset, IEnumerable <int> rows, IEnumerable <string> variables, bool normalize = false)
        {
            var res = new PrincipleComponentTransformation();

            res.BuildPca(dataset, rows, variables, normalize);
            return(res);
        }
Пример #3
0
        public override IRegressionModel Build(IRegressionProblemData pd, IRandom random,
                                               CancellationToken cancellationToken, out int numberOfParameters)
        {
            var pca    = PrincipleComponentTransformation.CreateProjection(pd.Dataset, pd.TrainingIndices, pd.AllowedInputVariables, normalize: true);
            var pcdata = pca.TransformProblemData(pd);
            ComponentReducedLinearModel bestModel = null;
            var bestCvrmse = double.MaxValue;

            numberOfParameters = 1;
            for (var i = 1; i <= Math.Min(NumberOfComponents, pd.AllowedInputVariables.Count()); i++)
            {
                var pd2    = (IRegressionProblemData)pcdata.Clone();
                var inputs = new HashSet <string>(pca.ComponentNames.Take(i));
                foreach (var v in pd2.InputVariables.CheckedItems.ToArray())
                {
                    pd2.InputVariables.SetItemCheckedState(v.Value, inputs.Contains(v.Value.Value));
                }
                double rmse;
                var    model = PreconstructedLinearModel.CreateLinearModel(pd2, out rmse);
                if (rmse > bestCvrmse)
                {
                    continue;
                }
                bestModel          = new ComponentReducedLinearModel(pd2.TargetVariable, model, pca);
                numberOfParameters = i + 1;
                bestCvrmse         = rmse;
            }
            return(bestModel);
        }
Пример #4
0
 public ComponentReducedLinearModel(string targetVariable, IRegressionModel model, PrincipleComponentTransformation pca) : base(targetVariable)
 {
     Model = model;
     Pca   = pca;
 }
Пример #5
0
 private ComponentReducedLinearModel(ComponentReducedLinearModel original, Cloner cloner) : base(original, cloner)
 {
     Model = cloner.Clone(original.Model);
     Pca   = cloner.Clone(original.Pca);
 }