- Timestamp:
- 09/14/09 12:59:50 (15 years ago)
- Location:
- trunk/sources
- Files:
-
- 1 added
- 6 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj
r2328 r2349 85 85 <Compile Include="BestSolutionStorer.cs" /> 86 86 <Compile Include="ClassificationProblemInjector.cs" /> 87 <Compile Include="SimpleTheilInequalityCoefficientEvaluator.cs" /> 87 88 <Compile Include="SolutionExtractor.cs" /> 88 89 <Compile Include="PredictorBase.cs" /> -
trunk/sources/HeuristicLab.Modeling/3.2/SimpleTheilInequalityCoefficientEvaluator.cs
r2348 r2349 25 25 using HeuristicLab.DataAnalysis; 26 26 27 namespace HeuristicLab. GP.StructureIdentification.TimeSeries{28 public class TheilInequalityCoefficientEvaluator : GPEvaluatorBase {27 namespace HeuristicLab.Modeling { 28 public class SimpleTheilInequalityCoefficientEvaluator : SimpleEvaluatorBase { 29 29 public override string Description { 30 30 get { 31 return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates 32 the 'Theil inequality coefficient (Theil's U2 not U1!)' of estimated values vs. real values of 'TargetVariable'. 31 return @"Calculates the Theil inequality coefficient (Theil's U2 not U1!) of estimated values vs. real values of 'TargetVariable'. 33 32 34 33 U2 = Sqrt(1/N * Sum(P_t - A_t)^2 ) / Sqrt(1/N * Sum(A_t)^2 ) … … 42 41 } 43 42 44 public TheilInequalityCoefficientEvaluator() 45 : base() { 46 AddVariableInfo(new VariableInfo("TheilInequalityCoefficient", "Theil's inequality coefficient (U2) of the model", typeof(DoubleData), VariableKind.New)); 47 AddVariableInfo(new VariableInfo("TheilInequalityCoefficientBias", "Bias proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New)); 48 AddVariableInfo(new VariableInfo("TheilInequalityCoefficientVariance", "Variance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New)); 49 AddVariableInfo(new VariableInfo("TheilInequalityCoefficientCovariance", "Covariance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New)); 43 public override string OutputVariableName { 44 get { 45 return "TheilInequalityCoefficient"; 46 } 50 47 } 51 48 52 public override void Evaluate(IScope scope, ITreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) { 53 #region create result variables 54 DoubleData theilInequaliy = GetVariableValue<DoubleData>("TheilInequalityCoefficient", scope, false, false); 55 if (theilInequaliy == null) { 56 theilInequaliy = new DoubleData(); 57 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficient"), theilInequaliy)); 58 } 59 DoubleData uBias = GetVariableValue<DoubleData>("TheilInequalityCoefficientBias", scope, false, false); 60 if (uBias == null) { 61 uBias = new DoubleData(); 62 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientBias"), uBias)); 63 } 64 DoubleData uVariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientVariance", scope, false, false); 65 if (uVariance == null) { 66 uVariance = new DoubleData(); 67 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientVariance"), uVariance)); 68 } 69 DoubleData uCovariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientCovariance", scope, false, false); 70 if (uCovariance == null) { 71 uCovariance = new DoubleData(); 72 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientCovariance"), uCovariance)); 73 } 74 #endregion 49 public override double Evaluate(double[,] values) { 50 return Calculate(values); 51 } 75 52 53 public static double Calculate(double[,] values) { 54 int n = values.GetLength(0); 76 55 double errorsSquaredSum = 0.0; 77 56 double originalSquaredSum = 0.0; 78 double[] estimatedChanges = new double[end - start];79 double[] originalChanges = new double[end - start];80 57 int nSamples = 0; 81 for (int sample = start; sample < end; sample++) { 82 double prevValue = dataset.GetValue(sample - 1, targetVariable); 83 double estimatedChange = evaluator.Evaluate(sample) - prevValue; 84 double originalChange = dataset.GetValue(sample, targetVariable) - prevValue; 85 if (updateTargetValues) { 86 dataset.SetValue(sample, targetVariable, estimatedChange + prevValue); 87 } 58 for (int sample = 1; sample < n; sample++) { 59 double prevValue = values[sample - 1, 1]; 60 double estimatedChange = values[sample, 0] - prevValue; 61 double originalChange = values[sample, 1] - prevValue; 88 62 if (!double.IsNaN(originalChange) && !double.IsInfinity(originalChange)) { 89 63 double error = estimatedChange - originalChange; 90 64 errorsSquaredSum += error * error; 91 65 originalSquaredSum += originalChange * originalChange; 92 estimatedChanges[sample - start] = estimatedChange;93 originalChanges[sample - start] = originalChange;94 66 nSamples++; 95 67 } … … 98 70 if (double.IsNaN(quality) || double.IsInfinity(quality)) 99 71 quality = double.MaxValue; 100 theilInequaliy.Data = quality; // U2 101 102 // decomposition into U_bias + U_variance + U_covariance parts 103 double bias = Statistics.Mean(estimatedChanges) - Statistics.Mean(originalChanges); 104 bias *= bias; // squared 105 uBias.Data = bias / (errorsSquaredSum / nSamples); 106 107 double variance = Statistics.StandardDeviation(estimatedChanges) - Statistics.StandardDeviation(originalChanges); 108 variance *= variance; // squared 109 uVariance.Data = variance / (errorsSquaredSum / nSamples); 110 111 // all parts add up to one so I don't have to calculate the correlation coefficient for the covariance proportion 112 uCovariance.Data = 1.0 - uBias.Data - uVariance.Data; 72 return quality; 113 73 } 114 74 } -
trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj
r2328 r2349 83 83 </ItemGroup> 84 84 <ItemGroup> 85 <Compile Include="TimeSeriesSupportVectorRegression.cs" /> 85 86 <Compile Include="PredictorView.cs"> 86 87 <SubType>UserControl</SubType> -
trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMHelper.cs
r2347 r2349 24 24 } 25 25 26 int maxColumns = (dataset.Columns - skippedFeatures.Count()) * (maxTimeOffset -minTimeOffset);26 int maxColumns = (dataset.Columns - skippedFeatures.Count()) * (maxTimeOffset - minTimeOffset + 1); 27 27 28 28 double[] targetVector = new double[rowCount]; … … 42 42 if (!skippedFeatures.Contains(col) && col != targetVariable && columnMapping.ContainsKey(col)) { 43 43 for (int timeOffset = minTimeOffset; timeOffset <= maxTimeOffset; timeOffset++) { 44 int actualColumn = columnMapping[col] * (maxTimeOffset - minTimeOffset ) + (timeOffset - maxTimeOffset) + 1;44 int actualColumn = columnMapping[col] * (maxTimeOffset - minTimeOffset + 1) + (timeOffset - minTimeOffset); 45 45 double value = dataset.GetValue(start + row + timeOffset, col); 46 46 if (!double.IsNaN(value)) -
trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorCreator.cs
r2347 r2349 42 42 AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); 43 43 AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); 44 AddVariableInfo(new VariableInfo("MaxTimeOffset", " Maximal time offset for time-series prognosis", typeof(IntData), VariableKind.In));45 AddVariableInfo(new VariableInfo("MinTimeOffset", " Minimal time offset for time-series prognosis", typeof(IntData), VariableKind.In));44 AddVariableInfo(new VariableInfo("MaxTimeOffset", "(optional) Maximal time offset for time-series prognosis", typeof(IntData), VariableKind.In)); 45 AddVariableInfo(new VariableInfo("MinTimeOffset", "(optional) Minimal time offset for time-series prognosis", typeof(IntData), VariableKind.In)); 46 46 47 47 //SVM parameters … … 71 71 int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data; 72 72 int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data; 73 int maxTimeOffset = GetVariableValue<IntData>("MaxTimeOffset", scope, true).Data; 74 int minTimeOffset = GetVariableValue<IntData>("MinTimeOffset", scope, true).Data; 73 IntData maxTimeOffsetData = GetVariableValue<IntData>("MaxTimeOffset", scope, true, false); 74 int maxTimeOffset = maxTimeOffsetData == null ? 0 : maxTimeOffsetData.Data; 75 IntData minTimeOffsetData = GetVariableValue<IntData>("MinTimeOffset", scope, true, false); 76 int minTimeOffset = minTimeOffsetData == null ? 0 : minTimeOffsetData.Data; 75 77 string svmType = GetVariableValue<StringData>("SVMType", scope, true).Data; 76 78 string svmKernelType = GetVariableValue<StringData>("SVMKernelType", scope, true).Data; -
trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorEvaluator.cs
r2347 r2349 38 38 AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); 39 39 AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); 40 AddVariableInfo(new VariableInfo("MaxTimeOffset", " Maximal allowed time offset for input variables", typeof(IntData), VariableKind.In));41 AddVariableInfo(new VariableInfo("MinTimeOffset", " Minimal allowed time offset for input variables", typeof(IntData), VariableKind.In));40 AddVariableInfo(new VariableInfo("MaxTimeOffset", "(optional) Maximal allowed time offset for input variables", typeof(IntData), VariableKind.In)); 41 AddVariableInfo(new VariableInfo("MinTimeOffset", "(optional) Minimal allowed time offset for input variables", typeof(IntData), VariableKind.In)); 42 42 AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(SVMModel), VariableKind.In)); 43 43 AddVariableInfo(new VariableInfo("Values", "Target vs predicted values", typeof(DoubleMatrixData), VariableKind.New | VariableKind.Out)); … … 50 50 int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data; 51 51 int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data; 52 int minTimeOffset = GetVariableValue<IntData>("MinTimeOffset", scope, true).Data; 53 int maxTimeOffset = GetVariableValue<IntData>("MaxTimeOffset", scope, true).Data; 52 IntData minTimeOffsetData = GetVariableValue<IntData>("MinTimeOffset", scope, true, false); 53 int minTimeOffset = minTimeOffsetData == null ? 0 : minTimeOffsetData.Data; 54 IntData maxTimeOffsetData = GetVariableValue<IntData>("MaxTimeOffset", scope, true, false); 55 int maxTimeOffset = maxTimeOffsetData == null ? 0 : maxTimeOffsetData.Data; 54 56 SVMModel modelData = GetVariableValue<SVMModel>("SVMModel", scope, true); 55 57 SVM.Problem problem = SVMHelper.CreateSVMProblem(dataset, targetVariable, start, end, minTimeOffset, maxTimeOffset); -
trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs
r2347 r2349 39 39 public class SupportVectorRegression : ItemBase, IEditable, IAlgorithm { 40 40 41 public string Name { get { return "SupportVectorRegression"; } }42 public string Description { get { return "TODO"; } }41 public virtual string Name { get { return "SupportVectorRegression"; } } 42 public virtual string Description { get { return "TODO"; } } 43 43 44 44 private SequentialEngine.SequentialEngine engine; … … 107 107 } 108 108 109 public int MaxTimeOffset {110 get { return GetVariableInjector().GetVariable("MaxTimeOffset").GetValue<IntData>().Data; }111 set { GetVariableInjector().GetVariable("MaxTimeOffset").GetValue<IntData>().Data = value; }112 }113 114 public int MinTimeOffset {115 get { return GetVariableInjector().GetVariable("MinTimeOffset").GetValue<IntData>().Data; }116 set { GetVariableInjector().GetVariable("MinTimeOffset").GetValue<IntData>().Data = value; }117 }118 119 109 public SupportVectorRegression() { 120 110 engine = new SequentialEngine.SequentialEngine(); … … 125 115 MaxNuIndex = NuList.Data.Length; 126 116 MaxGammaIndex = GammaList.Data.Length; 127 MaxTimeOffset = 0;128 MinTimeOffset = 0;129 117 } 130 118 … … 149 137 } 150 138 151 pr ivateIOperator CreateInitialization() {139 protected virtual IOperator CreateInitialization() { 152 140 SequentialProcessor seq = new SequentialProcessor(); 153 141 seq.Name = "Initialization"; … … 159 147 seq.AddSubOperator(new RandomInjector()); 160 148 161 //DatasetShuffler shuffler = new DatasetShuffler();162 //shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";163 //shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd";164 //seq.AddSubOperator(shuffler);149 DatasetShuffler shuffler = new DatasetShuffler(); 150 shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart"; 151 shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd"; 152 seq.AddSubOperator(shuffler); 165 153 return seq; 166 154 } … … 279 267 modelProcessor.AddSubOperator(trainingEvaluator); 280 268 modelProcessor.AddSubOperator(CreateEvaluator("Validation")); 281 modelProcessor.AddSubOperator(CreateEvaluator("Test"));282 269 283 270 DataCollector collector = new DataCollector(); … … 307 294 } 308 295 309 pr ivateIOperator CreateEvaluator(string p) {296 protected virtual IOperator CreateEvaluator(string p) { 310 297 CombinedOperator op = new CombinedOperator(); 311 298 op.Name = p + "Evaluator"; … … 379 366 } 380 367 381 pr ivate IOperator CreateGlobalInjector() {368 protected virtual VariableInjector CreateGlobalInjector() { 382 369 VariableInjector injector = new VariableInjector(); 383 370 injector.AddVariable(new HeuristicLab.Core.Variable("CostIndex", new IntData(0))); … … 407 394 injector.AddVariable(new HeuristicLab.Core.Variable("Type", new StringData("NU_SVR"))); 408 395 injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0))); 409 injector.AddVariable(new HeuristicLab.Core.Variable("MaxTimeOffset", new IntData()));410 injector.AddVariable(new HeuristicLab.Core.Variable("MinTimeOffset", new IntData()));411 396 return injector; 412 397 } 413 398 414 pr ivateIOperator CreateModelAnalyser() {399 protected virtual IOperator CreateModelAnalyser() { 415 400 CombinedOperator modelAnalyser = new CombinedOperator(); 416 401 modelAnalyser.Name = "Model Analyzer"; 417 402 SequentialSubScopesProcessor seqSubScopeProc = new SequentialSubScopesProcessor(); 418 403 SequentialProcessor seqProc = new SequentialProcessor(); 404 419 405 PredictorBuilder predictorBuilder = new PredictorBuilder(); 420 406 predictorBuilder.GetVariableInfo("SVMModel").ActualName = "Model"; … … 426 412 qualImpactCalc.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd"; 427 413 414 seqProc.AddSubOperator(CreateEvaluator("Test")); 428 415 seqProc.AddSubOperator(predictorBuilder); 429 416 seqProc.AddSubOperator(evalImpactCalc); … … 436 423 437 424 438 protected internalvirtual IAnalyzerModel CreateSVMModel(IScope bestModelScope) {425 protected virtual IAnalyzerModel CreateSVMModel(IScope bestModelScope) { 439 426 AnalyzerModel model = new AnalyzerModel(); 440 427 model.SetResult("TrainingMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("Quality", false).Data); … … 486 473 } 487 474 488 pr ivateIOperator GetVariableInjector() {475 protected IOperator GetVariableInjector() { 489 476 return GetMainOperator().SubOperators[0].SubOperators[0]; 490 477 } 491 478 492 pr ivateIOperator GetMainOperator() {479 protected IOperator GetMainOperator() { 493 480 CombinedOperator svm = (CombinedOperator)Engine.OperatorGraph.InitialOperator; 494 481 return svm.OperatorGraph.InitialOperator;
Note: See TracChangeset
for help on using the changeset viewer.