Changeset 2222 for trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/CrossValidation.cs
- Timestamp:
- 08/03/09 12:26:42 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/CrossValidation.cs
r1529 r2222 21 21 22 22 using System; 23 using System.Collections.Generic;24 using System.Text;25 using System.Xml;26 23 using HeuristicLab.Core; 27 24 using HeuristicLab.Data; 28 25 using HeuristicLab.DataAnalysis; 29 26 30 namespace HeuristicLab.GP.StructureIdentification.Classification 31 { 32 public class CrossValidation : OperatorBase 33 { 27 namespace HeuristicLab.GP.StructureIdentification.Classification { 28 public class CrossValidation : OperatorBase { 34 29 35 36 37 38 39 40 41 42 30 private const string DATASET = "Dataset"; 31 private const string NFOLD = "n-Fold"; 32 private const string TRAININGSAMPLESSTART = "TrainingSamplesStart"; 33 private const string TRAININGSAMPLESEND = "TrainingSamplesEnd"; 34 private const string VALIDATIONSAMPLESSTART = "ValidationSamplesStart"; 35 private const string VALIDATIONSAMPLESEND = "ValidationSamplesEnd"; 36 private const string TESTSAMPLESSTART = "TestSamplesStart"; 37 private const string TESTSAMPLESEND = "TestSamplesEnd"; 43 38 44 public override string Description 45 { 46 get { return @"TASK"; } 47 } 39 public override string Description { 40 get { return @"TASK"; } 41 } 48 42 49 public CrossValidation() 50 : base() 51 { 52 AddVariableInfo(new VariableInfo(DATASET, "The original dataset and the new datasets in the newly created subscopes", typeof(Dataset), VariableKind.In)); 53 AddVariableInfo(new VariableInfo(NFOLD, "Number of folds for the cross-validation", typeof(IntData), VariableKind.In)); 54 AddVariableInfo(new VariableInfo(TRAININGSAMPLESSTART, "The start of training samples in the original dataset and starts of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 55 AddVariableInfo(new VariableInfo(TRAININGSAMPLESEND, "The end of training samples in the original dataset and ends of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 56 AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESSTART, "The start of validation samples in the original dataset and starts of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 57 AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESEND, "The end of validation samples in the original dataset and ends of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 58 AddVariableInfo(new VariableInfo(TESTSAMPLESSTART, "The start of the test samples in the new datasets", typeof(IntData), VariableKind.New)); 59 AddVariableInfo(new VariableInfo(TESTSAMPLESEND, "The end of the test samples in the new datasets", typeof(IntData), VariableKind.New)); 60 } 43 public CrossValidation() 44 : base() { 45 AddVariableInfo(new VariableInfo(DATASET, "The original dataset and the new datasets in the newly created subscopes", typeof(Dataset), VariableKind.In)); 46 AddVariableInfo(new VariableInfo(NFOLD, "Number of folds for the cross-validation", typeof(IntData), VariableKind.In)); 47 AddVariableInfo(new VariableInfo(TRAININGSAMPLESSTART, "The start of training samples in the original dataset and starts of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 48 AddVariableInfo(new VariableInfo(TRAININGSAMPLESEND, "The end of training samples in the original dataset and ends of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 49 AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESSTART, "The start of validation samples in the original dataset and starts of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 50 AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESEND, "The end of validation samples in the original dataset and ends of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New)); 51 AddVariableInfo(new VariableInfo(TESTSAMPLESSTART, "The start of the test samples in the new datasets", typeof(IntData), VariableKind.New)); 52 AddVariableInfo(new VariableInfo(TESTSAMPLESEND, "The end of the test samples in the new datasets", typeof(IntData), VariableKind.New)); 53 } 61 54 62 55 public override IOperation Apply(IScope scope) { 63 56 Dataset origDataset = GetVariableValue<Dataset>(DATASET, scope, true); 64 57 int nFolds = GetVariableValue<IntData>(NFOLD, scope, true).Data; 65 if (nFolds < 2) throw new ArgumentException("The number of folds (nFolds) has to be >=2 for cross validation"); 58 if (nFolds < 2) throw new ArgumentException("The number of folds (nFolds) has to be >=2 for cross validation"); 66 59 int origTrainingSamplesStart = GetVariableValue<IntData>(TRAININGSAMPLESSTART, scope, true).Data; 67 60 int origTrainingSamplesEnd = GetVariableValue<IntData>(TRAININGSAMPLESEND, scope, true).Data; 68 61 int origValidationSamplesStart = GetVariableValue<IntData>(VALIDATIONSAMPLESSTART, scope, true).Data; 69 62 int origValidationSamplesEnd = GetVariableValue<IntData>(VALIDATIONSAMPLESEND, scope, true).Data; 70 int n =origDataset.Rows;71 int origTrainingSamples = (origTrainingSamplesEnd -origTrainingSamplesStart);72 int origValidationSamples = (origValidationSamplesEnd -origValidationSamplesStart);63 int n = origDataset.Rows; 64 int origTrainingSamples = (origTrainingSamplesEnd - origTrainingSamplesStart); 65 int origValidationSamples = (origValidationSamplesEnd - origValidationSamplesStart); 73 66 74 67 double percentTrainingSamples = origTrainingSamples / (double)(origValidationSamples + origTrainingSamples); … … 82 75 int newTestSamplesEnd = n; 83 76 84 for (int i = 0; i < nFolds; i++) {77 for (int i = 0; i < nFolds; i++) { 85 78 Scope childScope = new Scope(i.ToString()); 86 79 Dataset rotatedSet = new Dataset(); … … 106 99 } 107 100 108 private void RotateArray(double[] samples, int p) 109 { 110 Array.Reverse(samples, 0, p); 111 Array.Reverse(samples, p, samples.Length - p); 112 Array.Reverse(samples); 113 } 101 private void RotateArray(double[] samples, int p) { 102 Array.Reverse(samples, 0, p); 103 Array.Reverse(samples, p, samples.Length - p); 104 Array.Reverse(samples); 114 105 } 106 } 115 107 }
Note: See TracChangeset
for help on using the changeset viewer.