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); }
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); }
public ComponentReducedLinearModel(string targetVariable, IRegressionModel model, PrincipleComponentTransformation pca) : base(targetVariable) { Model = model; Pca = pca; }
private ComponentReducedLinearModel(ComponentReducedLinearModel original, Cloner cloner) : base(original, cloner) { Model = cloner.Clone(original.Model); Pca = cloner.Clone(original.Pca); }