Ignore:
Timestamp:
09/22/10 11:22:49 (9 years ago)
Author:
mkommend
Message:

Preparation for cross validation - removed the test samples from the trainining samples and added ValidationPercentage parameter (ticket #1199).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblemData.cs

    r4451 r4468  
    3535  public class DataAnalysisProblemData : ParameterizedNamedItem, IStorableContent {
    3636    protected bool suppressEvents = false;
     37    #region IStorableContent Members
     38    public string Filename { get; set; }
     39    #endregion
    3740    #region default data
    3841    // y = x^4 + x^3 + x^2 + x
     
    8790      get { return (IValueParameter<IntValue>)Parameters["TestSamplesEnd"]; }
    8891    }
     92    public IValueParameter<PercentValue> ValidationPercentageParameter {
     93      get { return (IValueParameter<PercentValue>)Parameters["ValidationPercentage"]; }
     94    }
    8995    #endregion
    9096
    9197    #region properties
    9298    public Dataset Dataset {
    93       get { return (Dataset)DatasetParameter.Value; }
     99      get { return DatasetParameter.Value; }
    94100      set {
    95101        if (value != Dataset) {
     
    100106    }
    101107    public StringValue TargetVariable {
    102       get { return (StringValue)TargetVariableParameter.Value; }
     108      get { return TargetVariableParameter.Value; }
    103109      set {
    104110        if (value != TargetVariableParameter.Value) {
     
    110116    }
    111117    public ICheckedItemList<StringValue> InputVariables {
    112       get { return (ICheckedItemList<StringValue>)InputVariablesParameter.Value; }
     118      get { return InputVariablesParameter.Value; }
    113119      set {
    114120        if (value != InputVariables) {
     
    120126    }
    121127    public IntValue TrainingSamplesStart {
    122       get { return (IntValue)TrainingSamplesStartParameter.Value; }
     128      get { return TrainingSamplesStartParameter.Value; }
    123129      set {
    124130        if (value != TrainingSamplesStart) {
     
    130136    }
    131137    public IntValue TrainingSamplesEnd {
    132       get { return (IntValue)TrainingSamplesEndParameter.Value; }
     138      get { return TrainingSamplesEndParameter.Value; }
    133139      set {
    134140        if (value != TrainingSamplesEnd) {
     
    140146    }
    141147    public IntValue TestSamplesStart {
    142       get { return (IntValue)TestSamplesStartParameter.Value; }
     148      get { return TestSamplesStartParameter.Value; }
    143149      set {
    144150        if (value != TestSamplesStart) {
     
    150156    }
    151157    public IntValue TestSamplesEnd {
    152       get { return (IntValue)TestSamplesEndParameter.Value; }
     158      get { return TestSamplesEndParameter.Value; }
    153159      set {
    154160        if (value != TestSamplesEnd) {
     
    159165      }
    160166    }
    161     #endregion
    162 
    163     #region IStorableContent Members
    164     public string Filename { get; set; }
    165     #endregion
     167    public PercentValue ValidationPercentage {
     168      get { return ValidationPercentageParameter.Value; }
     169      set {
     170        if (value != ValidationPercentage) {
     171          if (value == null) throw new ArgumentNullException();
     172          if (value.Value < 0 || value.Value > 1) throw new ArgumentException("ValidationPercentage must be between 0 and 1.");
     173          if (ValidationPercentage != null) DeregisterValueTypeEventHandlers(ValidationPercentage);
     174          ValidationPercentageParameter.Value = value;
     175        }
     176      }
     177    }
     178
     179    public IEnumerable<int> TrainingIndizes {
     180      get {
     181        return Enumerable.Range(TrainingSamplesStart.Value, TrainingSamplesEnd.Value - TrainingSamplesStart.Value)
     182                         .Where(i => i > 0 && i < Dataset.Rows && (i < TestSamplesStart.Value || TestSamplesEnd.Value <= i));
     183      }
     184    }
     185    public IEnumerable<int> TestIndizes {
     186      get {
     187        return Enumerable.Range(TestSamplesStart.Value, TestSamplesEnd.Value - TestSamplesStart.Value)
     188           .Where(i => i > 0 && i < Dataset.Rows);
     189      }
     190    }
     191    #endregion
     192
    166193
    167194    public DataAnalysisProblemData()
     
    180207      Parameters.Add(new ValueParameter<IntValue>("TestSamplesStart", new IntValue(15)));
    181208      Parameters.Add(new ValueParameter<IntValue>("TestSamplesEnd", new IntValue(25)));
     209      Parameters.Add(new ValueParameter<PercentValue>("ValidationPercentage", "The relative amount of the training samples that should be used as validation set.", new PercentValue(0.5)));
    182210      RegisterParameterEventHandlers();
    183211      RegisterParameterValueEventHandlers();
     
    200228      Parameters.Add(new ValueParameter<IntValue>("TestSamplesStart", new IntValue(testSamplesStart)));
    201229      Parameters.Add(new ValueParameter<IntValue>("TestSamplesEnd", new IntValue(testSamplesEnd)));
     230      Parameters.Add(new ValueParameter<PercentValue>("ValidationPercentage", "The relative amount of the training samples that should be used as validation set.", new PercentValue(0.5)));
    202231      RegisterParameterEventHandlers();
    203232      RegisterParameterValueEventHandlers();
     
    209238    [StorableHook(HookType.AfterDeserialization)]
    210239    private void AfterDeserializationHook() {
     240      if (!Parameters.ContainsKey("ValidationPercentage"))
     241        Parameters.Add(new ValueParameter<PercentValue>("ValidationPercentage", "The relative amount of the training samples that should be used as validation set.", new PercentValue(0.5)));
     242
    211243      RegisterParameterEventHandlers();
    212244      RegisterParameterValueEventHandlers();
     
    230262      TestSamplesStartParameter.ValueChanged += new EventHandler(TestSamplesStartParameter_ValueChanged);
    231263      TestSamplesEndParameter.ValueChanged += new EventHandler(TestSamplesEndParameter_ValueChanged);
     264      ValidationPercentageParameter.ValueChanged += new EventHandler(ValidationPercentageParameter_ValueChanged);
    232265    }
    233266
     
    239272      RegisterValueTypeEventHandlers(TestSamplesStart);
    240273      RegisterValueTypeEventHandlers(TestSamplesEnd);
     274      RegisterValueTypeEventHandlers(ValidationPercentage);
    241275    }
    242276
     
    270304    private void TestSamplesEndParameter_ValueChanged(object sender, EventArgs e) {
    271305      RegisterValueTypeEventHandlers(TestSamplesEnd);
     306      OnProblemDataChanged(EventArgs.Empty);
     307    }
     308    private void ValidationPercentageParameter_ValueChanged(object sender, EventArgs e) {
     309      RegisterValueTypeEventHandlers(ValidationPercentage);
    272310      OnProblemDataChanged(EventArgs.Empty);
    273311    }
Note: See TracChangeset for help on using the changeset viewer.