Changeset 4022 for trunk/sources
- Timestamp:
- 07/09/10 17:01:36 (14 years ago)
- Location:
- trunk/sources
- Files:
-
- 4 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Compiler/SymbolicExpressionTreeCompiler.cs
r3747 r4022 37 37 List<Instruction> code = new List<Instruction>(); 38 38 entryPoint.Clear(); 39 // compile main body 40 code.AddRange(Compile(tree.Root.SubTrees[0].SubTrees[0], opCodeMapper)); 41 // compile branches 39 // compile main body branches 40 foreach (var branch in tree.Root.SubTrees[0].SubTrees) { 41 code.AddRange(Compile(branch, opCodeMapper)); 42 } 43 // compile function branches 42 44 var functionBranches = from node in tree.IterateNodesPrefix() 43 45 where node.Symbol is Defun -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs
r3996 r4022 246 246 247 247 #region validation best model 248 int targetVariableIndex = ProblemData.Dataset.GetVariableIndex(ProblemData.TargetVariable.Value);248 string targetVariable = ProblemData.TargetVariable.Value; 249 249 int validationStart = ValidiationSamplesStart.Value; 250 250 int validationEnd = ValidationSamplesEnd.Value; … … 257 257 OnlineMeanSquaredErrorEvaluator mseEvaluator = new OnlineMeanSquaredErrorEvaluator(); 258 258 foreach (var scaledTree in scaledTrees) { 259 mseEvaluator.Reset(); 260 IEnumerable<double> estimatedValidationValues = SymbolicExpressionTreeInterpreter.GetSymbolicExpressionTreeValues(scaledTree, ProblemData.Dataset, Enumerable.Range(validationStart, validationEnd - validationStart)); 261 IEnumerable<double> originalValidationValues = ProblemData.Dataset.GetEnumeratedVariableValues(targetVariableIndex, validationStart, validationEnd); 262 var estimatedEnumerator = estimatedValidationValues.GetEnumerator(); 263 var originalEnumerator = originalValidationValues.GetEnumerator(); 264 while (estimatedEnumerator.MoveNext() & originalEnumerator.MoveNext()) { 265 double estimated = estimatedEnumerator.Current; 266 if (double.IsNaN(estimated)) estimated = upperEstimationLimit; 267 else estimated = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, estimated)); 268 mseEvaluator.Add(originalEnumerator.Current, estimated); 269 } 270 double validationMse = mseEvaluator.MeanSquaredError; 259 double validationMse = SymbolicRegressionMeanSquaredErrorEvaluator.Calculate(SymbolicExpressionTreeInterpreter, scaledTree, 260 lowerEstimationLimit, upperEstimationLimit, 261 ProblemData.Dataset, targetVariable, 262 validationStart, validationEnd); 263 271 264 if (validationMse < bestValidationMse) { 272 265 bestValidationMse = validationMse; -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj
r3975 r4022 172 172 <DependentUpon>ConstantView.cs</DependentUpon> 173 173 </Compile> 174 <Compile Include="Symbolic\Symbols\LaggedVariableView.cs"> 175 <SubType>UserControl</SubType> 176 </Compile> 177 <Compile Include="Symbolic\Symbols\LaggedVariableView.Designer.cs"> 178 <DependentUpon>LaggedVariableView.cs</DependentUpon> 179 </Compile> 174 180 <Compile Include="Symbolic\Symbols\VariableView.cs"> 175 181 <SubType>UserControl</SubType> … … 252 258 <Name>HeuristicLab.Problems.DataAnalysis-3.3</Name> 253 259 </ProjectReference> 260 </ItemGroup> 261 <ItemGroup> 262 <EmbeddedResource Include="Symbolic\Symbols\LaggedVariableView.resx"> 263 <DependentUpon>LaggedVariableView.cs</DependentUpon> 264 </EmbeddedResource> 254 265 </ItemGroup> 255 266 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblemData.cs
r3933 r4022 39 39 #region default data 40 40 // y = x^4 + x^3 + x^2 + x 41 private readonlydouble[,] kozaF1 = new double[,] {41 private static double[,] kozaF1 = new double[,] { 42 42 {2.017885919, -1.449165046}, 43 43 {1.30060506, -1.344523885}, … … 185 185 } 186 186 187 public DataAnalysisProblemData(Dataset dataset, IEnumerable<string> inputVariables, string targetVariable, 188 int trainingSamplesStart, int trainingSamplesEnd, int testSamplesStart, int testSamplesEnd) { 189 var inputVariablesList = new CheckedItemList<StringValue>(inputVariables.Select(x => new StringValue(x))); 190 StringValue targetVariableValue = new StringValue(targetVariable); 191 var validTargetVariables = new ItemSet<StringValue>(); 192 foreach (var variable in dataset.VariableNames) 193 if (variable != targetVariable) 194 validTargetVariables.Add(new StringValue(variable)); 195 validTargetVariables.Add(targetVariableValue); 196 Parameters.Add(new ValueParameter<Dataset>("Dataset", dataset)); 197 Parameters.Add(new ValueParameter<ICheckedItemList<StringValue>>("InputVariables", inputVariablesList.AsReadOnly())); 198 Parameters.Add(new ConstrainedValueParameter<StringValue>("TargetVariable", validTargetVariables, targetVariableValue)); 199 Parameters.Add(new ValueParameter<IntValue>("TrainingSamplesStart", new IntValue(trainingSamplesStart))); 200 Parameters.Add(new ValueParameter<IntValue>("TrainingSamplesEnd", new IntValue(trainingSamplesEnd))); 201 Parameters.Add(new ValueParameter<IntValue>("TestSamplesStart", new IntValue(testSamplesStart))); 202 Parameters.Add(new ValueParameter<IntValue>("TestSamplesEnd", new IntValue(testSamplesEnd))); 203 RegisterParameterEventHandlers(); 204 RegisterParameterValueEventHandlers(); 205 } 187 206 188 207 [StorableConstructor] -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/OnlineMeanAbsolutePercentageErrorEvaluator.cs
r3996 r4022 47 47 } 48 48 49 #region IPairedEnumerableEvaluator Members 49 #region IOnlineEvaluator Members 50 public double Value { 51 get { return MeanAbsolutePercentageError; } 52 } 50 53 public void Reset() { 51 54 n = 0; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/OnlineMeanSquaredErrorEvaluator.cs
r3996 r4022 48 48 49 49 #region IOnlineEvaluator Members 50 public double Value { 51 get { return MeanSquaredError; } 52 } 50 53 public void Reset() { 51 54 n = 0; … … 56 59 if (double.IsNaN(estimated) || double.IsInfinity(estimated) || 57 60 double.IsNaN(original) || double.IsInfinity(original)) { 58 61 throw new ArgumentException("Mean squared error is not defined for NaN or infinity elements"); 59 62 } else { 60 63 double error = estimated - original; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/OnlinePearsonsRSquaredEvaluator.cs
r3996 r4022 61 61 62 62 #region IOnlineEvaluator Members 63 public double Value { 64 get { return RSquared; } 65 } 63 66 public void Reset() { 64 67 sum_sq_x = 0.0; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/SimpleNMSEEvaluator.cs
r3462 r4022 50 50 51 51 public static double Calculate(IEnumerable<double> original, IEnumerable<double> estimated) { 52 double mse = SimpleMSEEvaluator.Calculate(original, estimated); 53 return mse / original.Variance(); 52 OnlineNormalizedMeanSquaredErrorEvaluator nmseEvaluator = new OnlineNormalizedMeanSquaredErrorEvaluator(); 53 var originalEnumerator = original.GetEnumerator(); 54 var estimatedEnumerator = estimated.GetEnumerator(); 55 while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) { 56 nmseEvaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current); 57 } 58 if (originalEnumerator.MoveNext() || estimatedEnumerator.MoveNext()) { 59 throw new ArgumentException("Number of elements in original and estimated enumerations doesn't match."); 60 } 61 return nmseEvaluator.NormalizedMeanSquaredError; 54 62 } 55 63 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLab.Problems.DataAnalysis-3.3.csproj
r3999 r4022 84 84 <None Include="HeuristicLabProblemsDataAnalysisPlugin.cs.frame" /> 85 85 <None Include="Properties\AssemblyInfo.frame" /> 86 <Compile Include="Evaluators\OnlineMeanAndVarianceCalculator.cs" /> 87 <Compile Include="Evaluators\OnlineNormalizedMeanSquaredErrorEvaluator.cs" /> 86 88 <Compile Include="DataAnalysisSolution.cs" /> 87 89 <Compile Include="CsvFileParser.cs" /> -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Interfaces/IOnlineEvaluator.cs
r3996 r4022 28 28 namespace HeuristicLab.Problems.DataAnalysis { 29 29 public interface IOnlineEvaluator { 30 double Value { get; } 30 31 void Reset(); 31 32 void Add(double original, double estimated); -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/SimpleArithmeticExpressionInterpreter.cs
r3996 r4022 21 21 22 22 using System; 23 using System.Linq; 23 24 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 24 25 using HeuristicLab.Common; … … 97 98 private Instruction[] code; 98 99 private int pc; 100 private double[] argumentStack = new double[ARGUMENT_STACK_SIZE]; 101 private int argStackPointer; 99 102 100 103 public override bool CanChangeName { … … 140 143 } 141 144 142 private double[] argumentStack = new double[ARGUMENT_STACK_SIZE]; 143 private int argStackPointer; 144 145 public double Evaluate() { 146 var currentInstr = code[pc++]; 145 private double Evaluate() { 146 Instruction currentInstr = code[pc++]; 147 147 switch (currentInstr.opCode) { 148 148 case OpCodes.Add: { -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/LaggedVariable.cs
r3993 r4022 34 34 [StorableClass] 35 35 [Item("LaggedVariable", "Represents a variable value with a time offset.")] 36 public sealed class LaggedVariable : Symbol{37 #region Properties38 [Storable]39 private double weightNu;40 public double WeightNu {41 get { return weightNu; }42 set { weightNu = value; }43 }44 [Storable]45 private double weightSigma;46 public double WeightSigma {47 get { return weightSigma; }48 set {49 if (weightSigma < 0.0) throw new ArgumentException("Negative sigma is not allowed.");50 weightSigma = value;51 }52 }53 [Storable]54 private double weightManipulatorNu;55 public double WeightManipulatorNu {56 get { return weightManipulatorNu; }57 set { weightManipulatorNu = value; }58 }59 [Storable]60 private double weightManipulatorSigma;61 public double WeightManipulatorSigma {62 get { return weightManipulatorSigma; }63 set {64 if (weightManipulatorSigma < 0.0) throw new ArgumentException("Negative sigma is not allowed.");65 weightManipulatorSigma = value;66 }67 }68 private List<string> variableNames;69 [Storable]70 public IEnumerable<string> VariableNames {71 get { return variableNames; }72 set {73 if (value == null) throw new ArgumentNullException();74 variableNames.Clear();75 variableNames.AddRange(value);76 }77 }36 public sealed class LaggedVariable : Variable { 37 //#region Properties 38 //[Storable] 39 //private double weightNu; 40 //public double WeightNu { 41 // get { return weightNu; } 42 // set { weightNu = value; } 43 //} 44 //[Storable] 45 //private double weightSigma; 46 //public double WeightSigma { 47 // get { return weightSigma; } 48 // set { 49 // if (weightSigma < 0.0) throw new ArgumentException("Negative sigma is not allowed."); 50 // weightSigma = value; 51 // } 52 //} 53 //[Storable] 54 //private double weightManipulatorNu; 55 //public double WeightManipulatorNu { 56 // get { return weightManipulatorNu; } 57 // set { weightManipulatorNu = value; } 58 //} 59 //[Storable] 60 //private double weightManipulatorSigma; 61 //public double WeightManipulatorSigma { 62 // get { return weightManipulatorSigma; } 63 // set { 64 // if (weightManipulatorSigma < 0.0) throw new ArgumentException("Negative sigma is not allowed."); 65 // weightManipulatorSigma = value; 66 // } 67 //} 68 //private List<string> variableNames; 69 //[Storable] 70 //public IEnumerable<string> VariableNames { 71 // get { return variableNames; } 72 // set { 73 // if (value == null) throw new ArgumentNullException(); 74 // variableNames.Clear(); 75 // variableNames.AddRange(value); 76 // } 77 //} 78 78 [Storable] 79 79 private int minLag; … … 88 88 set { maxLag = value; } 89 89 } 90 #endregion90 //#endregion 91 91 public LaggedVariable() 92 92 : base("LaggedVariable", "Represents a variable value with a time offset.") { 93 weightNu = 1.0;94 weightSigma = 1.0;95 weightManipulatorNu = 0.0;96 weightManipulatorSigma = 1.0;97 variableNames = new List<string>();98 minLag = 0; maxLag = 0;93 //weightNu = 1.0; 94 //weightSigma = 1.0; 95 //weightManipulatorNu = 0.0; 96 //weightManipulatorSigma = 1.0; 97 //variableNames = new List<string>(); 98 minLag = -1; maxLag = -1; 99 99 } 100 100 … … 105 105 public override IDeepCloneable Clone(Cloner cloner) { 106 106 LaggedVariable clone = (LaggedVariable)base.Clone(cloner); 107 clone.weightNu = weightNu;108 clone.weightSigma = weightSigma;109 clone.variableNames = new List<string>(variableNames);110 clone.weightManipulatorNu = weightManipulatorNu;111 clone.weightManipulatorSigma = weightManipulatorSigma;107 //clone.weightNu = weightNu; 108 //clone.weightSigma = weightSigma; 109 //clone.variableNames = new List<string>(variableNames); 110 //clone.weightManipulatorNu = weightManipulatorNu; 111 //clone.weightManipulatorSigma = weightManipulatorSigma; 112 112 clone.minLag = minLag; 113 113 clone.maxLag = maxLag; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/LaggedVariableTreeNode.cs
r3997 r4022 30 30 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols { 31 31 [StorableClass] 32 public sealed class LaggedVariableTreeNode : SymbolicExpressionTreeTerminalNode {32 public sealed class LaggedVariableTreeNode : VariableTreeNode { 33 33 public new LaggedVariable Symbol { 34 34 get { return (LaggedVariable)base.Symbol; } 35 }36 [Storable]37 private double weight;38 public double Weight {39 get { return weight; }40 set { weight = value; }41 }42 [Storable]43 private string variableName;44 public string VariableName {45 get { return variableName; }46 set { variableName = value; }47 35 } 48 36 [Storable] … … 58 46 private LaggedVariableTreeNode(LaggedVariableTreeNode original) 59 47 : base(original) { 60 weight = original.weight;61 variableName = original.variableName;62 48 lag = original.lag; 63 49 } … … 73 59 public override void ResetLocalParameters(IRandom random) { 74 60 base.ResetLocalParameters(random); 75 weight = NormalDistributedRandom.NextDouble(random, Symbol.WeightNu, Symbol.WeightSigma);76 variableName = Symbol.VariableNames.SelectRandom(random);77 61 lag = random.Next(Symbol.MinLag, Symbol.MaxLag + 1); 78 62 } … … 80 64 public override void ShakeLocalParameters(IRandom random, double shakingFactor) { 81 65 base.ShakeLocalParameters(random, shakingFactor); 82 double x = NormalDistributedRandom.NextDouble(random, Symbol.WeightManipulatorNu, Symbol.WeightManipulatorSigma); 83 weight = weight + x * shakingFactor; 84 variableName = Symbol.VariableNames.SelectRandom(random); 85 lag = lag + random.Next(-1, 2); 66 lag = Math.Min(Symbol.MaxLag, Math.Max(Symbol.MinLag, lag + random.Next(-1, 2))); 86 67 } 87 68 … … 92 73 93 74 public override string ToString() { 94 return weight.ToString("E4") + " " + variableName + " (t" + (lag > 0 ? "+" : "") + lag + ")"; 75 return base.ToString() + 76 " (t" + (lag > 0 ? "+" : "") + lag + ")"; 95 77 } 96 78 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Variable.cs
r3993 r4022 34 34 [StorableClass] 35 35 [Item("Variable", "Represents a variable value.")] 36 public sealedclass Variable : Symbol {36 public class Variable : Symbol { 37 37 #region Properties 38 38 [Storable] … … 94 94 } 95 95 #endregion 96 public Variable() 97 : base("Variable", "Represents a variable value.") { 96 public Variable() : this("Variable", "Represents a variable value.") { } 97 public Variable(string name, string description) 98 : base(name, description) { 98 99 weightNu = 1.0; 99 100 weightSigma = 1.0; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/VariableTreeNode.cs
r3997 r4022 30 30 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols { 31 31 [StorableClass] 32 public sealedclass VariableTreeNode : SymbolicExpressionTreeTerminalNode {32 public class VariableTreeNode : SymbolicExpressionTreeTerminalNode { 33 33 public new Variable Symbol { 34 34 get { return (Variable)base.Symbol; } … … 48 48 49 49 50 pr ivateVariableTreeNode() { }50 protected VariableTreeNode() { } 51 51 52 52 // copy constructor 53 pr ivateVariableTreeNode(VariableTreeNode original)53 protected VariableTreeNode(VariableTreeNode original) 54 54 : base(original) { 55 55 weight = original.weight;
Note: See TracChangeset
for help on using the changeset viewer.