Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/27/18 15:46:12 (7 years ago)
Author:
pfleck
Message:

#2906 Added PreprocessingTransformation as a custom view-model for transformations in preprocessing.

Location:
branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs

    r15858 r15865  
    2121
    2222using System;
    23 using System.Collections.Generic;
    24 using System.Linq;
    25 using System.Runtime.CompilerServices;
    2623using HeuristicLab.Common;
    2724using HeuristicLab.Core;
     
    3431  [StorableClass]
    3532  public class DataAnalysisTransformation : ParameterizedNamedItem, IDataAnalysisTransformation {
    36     #region Parameters
    37     public IConstrainedValueParameter<StringValue> OriginalVariableParameter {
    38       get { return (IConstrainedValueParameter<StringValue>)Parameters["Original Variable"]; }
     33    #region Parameter Properties
     34    private IFixedValueParameter<StringValue> OriginalVariableParameter {
     35      get { return (IFixedValueParameter<StringValue>)Parameters["Original Variable"]; }
    3936    }
    4037
    41     public IConstrainedValueParameter<StringValue> TransformedVariableParameter {
    42       get { return (IConstrainedValueParameter<StringValue>)Parameters["Transformed Variable"]; }
     38    private IFixedValueParameter<StringValue> TransformedVariableParameter {
     39      get { return (IFixedValueParameter<StringValue>)Parameters["Transformed Variable"]; }
    4340    }
    4441
    45     public IValueParameter<ITransformation> TransformationParameter {
     42    private IValueParameter<ITransformation> TransformationParameter {
    4643      get { return (IValueParameter<ITransformation>)Parameters["Transformation"]; }
    4744    }
     
    5148    public string OriginalVariable {
    5249      get { return OriginalVariableParameter.Value.Value; }
    53       set { SetConstrainedValue(OriginalVariableParameter, value); }
     50      set { OriginalVariableParameter.Value.Value = value; }
    5451    }
    5552
    5653    public string TransformedVariable {
    5754      get { return TransformedVariableParameter.Value.Value; }
    58       set { SetConstrainedValue(TransformedVariableParameter, value); }
     55      set { TransformedVariableParameter.Value.Value = value; }
    5956    }
    6057
     
    6360      set { TransformationParameter.Value = value; }
    6461    }
    65 
    66     private static void SetConstrainedValue(IConstrainedValueParameter<StringValue> parameter, string value, [CallerMemberName] string caller = null) {
    67       if (value == null) throw new ArgumentNullException(caller);
    68       if (value == parameter.Value.Value) return;
    69 
    70       var matchingValue = parameter.ValidValues.SingleOrDefault(v => v.Value == value);
    71       if (matchingValue == null) throw new ArgumentException("The provided value is not valid.", caller);
    72       parameter.Value = matchingValue;
    73     }
    7462    #endregion
    7563
    7664    #region Constructor, Cloning & Persistence
    77     public DataAnalysisTransformation(IEnumerable<StringValue> variableNames)
     65    public DataAnalysisTransformation()
     66      : this("", "", new IdentityTransformation()) {
     67    }
     68    public DataAnalysisTransformation(string originalVariable, string transformedVariable, ITransformation transformation)
    7869      : base() {
    79       var originalVariables = new ItemSet<StringValue>(variableNames.Select(x => x.AsReadOnly()));
    80       var transformedVariables = new ItemSet<StringValue>(variableNames.Select(x => x.AsReadOnly()));
    81       Parameters.Add(new ConstrainedValueParameter<StringValue>("Original Variable", new ItemSet<StringValue>(originalVariables), originalVariables.FirstOrDefault()));
    82       Parameters.Add(new ConstrainedValueParameter<StringValue>("Transformed Variable", new ItemSet<StringValue>(transformedVariables), transformedVariables.FirstOrDefault()));
    83 
    84       //var transformations = new ItemSet<ITransformation>(ApplicationManager.Manager.GetInstances<ITransformation>());
    85       Parameters.Add(new ValueParameter<ITransformation>("Transformation", new IdentityTransformation()));
     70      Parameters.Add(new FixedValueParameter<StringValue>("Original Variable", new StringValue(originalVariable)));
     71      Parameters.Add(new FixedValueParameter<StringValue>("Transformed Variable", new StringValue(transformedVariable)));
     72      Parameters.Add(new ValueParameter<ITransformation>("Transformation", transformation));
    8673
    8774      RegisterEventHandlers();
     
    10996    #region Event-Handling
    11097    private void RegisterEventHandlers() {
    111       OriginalVariableParameter.ValueChanged += OriginalVariableParameter_ValueChanged;
    112       TransformedVariableParameter.ValueChanged += TransformedVariableParameter_ValueChanged;
     98      OriginalVariableParameter.Value.ValueChanged += OriginalVariableParameterValue_ValueChanged;
     99      TransformedVariableParameter.Value.ValueChanged += TransformedVariableParameterValue_ValueChanged;
    113100      TransformationParameter.ValueChanged += TransformationParameter_ValueChanged;
    114101    }
    115102
    116     private void OriginalVariableParameter_ValueChanged(object sender, EventArgs e) {
    117       OriginalVariableParameter.Value.ValueChanged += OriginalVariableParameterValue_ValueChanged;
    118       OnToStringChanged();
    119     }
    120103    private void OriginalVariableParameterValue_ValueChanged(object sender, EventArgs e) {
    121       OnToStringChanged();
    122     }
    123 
    124     private void TransformedVariableParameter_ValueChanged(object sender, EventArgs e) {
    125       TransformedVariableParameter.Value.ValueChanged += TransformedVariableParameterValue_ValueChanged;
    126104      OnToStringChanged();
    127105    }
     
    129107      OnToStringChanged();
    130108    }
    131 
    132109    private void TransformationParameter_ValueChanged(object sender, EventArgs e) {
    133110      OnToStringChanged();
    134111    }
    135112    #endregion
    136 
    137113
    138114    public override string ToString() {
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/ExponentialTransformation.cs

    r15847 r15865  
    4949    public ExponentialTransformation()
    5050      : base() {
    51       Parameters.Add(new FixedValueParameter<DoubleValue>("Base", "Base the logarithm", new DoubleValue(Math.E)));
     51      Parameters.Add(new FixedValueParameter<DoubleValue>("Base", "", new DoubleValue(Math.E)));
    5252    }
    5353
     
    6565    #endregion
    6666
    67     public override bool Check(IEnumerable<double> data, out string errorMessage) {
    68       if (data.Any(x => x <= 0)) {
    69         errorMessage = "Log is not available for zero or negative values";
    70         return false;
    71       }
    72       return base.Check(data, out errorMessage);
    73     }
    74 
    7567    public override IEnumerable<double> Apply(IEnumerable<double> data) {
    7668      return Apply(data, Base);
     
    8072      return InverseApply(data, Base);
    8173    }
     74
    8275
    8376    public static IEnumerable<double> Apply(IEnumerable<double> data, double @base = Math.E) {
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/LinearTransformation.cs

    r15847 r15865  
    4646    public double Slope {
    4747      get { return SlopeParameter.Value.Value; }
    48       set { SlopeParameter.Value.Value = value; }
     48      set { SlopeParameter.Value.Value = value; } //TODO: check for != 0?
    4949    }
    5050
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/LogarithmTransformation.cs

    r15846 r15865  
    8181    }
    8282
     83
    8384    public static IEnumerable<double> Apply(IEnumerable<double> data, double @base = Math.E) {
    8485      return data.Select(x => Math.Log(x, @base));
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/ZNormalizationTransformation.cs

    r15846 r15865  
    2929
    3030namespace HeuristicLab.Problems.DataAnalysis {
    31   [Item("Z-Score Normalization", "Z-Score normalization transformation to standardize (target_mu = 0, target_sigma = 1) the values")]
     31  [Item("Z-Score Normalization", "Z-Score normalization transformation to standardize the values to a Target Mean and Target Standard Deviation.")]
    3232  [StorableClass]
    3333  public class ZNormalizationTransformation : Transformation<double> {
     
    5858    public double OriginalMean {
    5959      get { return OriginalMeanParameter.Value.Value; }
    60       set { OriginalMeanParameter.Value.Value = value; }
     60      private set { OriginalMeanParameter.Value.Value = value; }
    6161    }
    6262    public double OriginalStandardDeviation {
    6363      get { return OriginalStandardDeviationParameter.Value.Value; }
    64       set { OriginalStandardDeviationParameter.Value.Value = value; }
     64      private set { OriginalStandardDeviationParameter.Value.Value = value; }
    6565    }
    6666    #endregion
     
    103103
    104104    public override IEnumerable<double> Apply(IEnumerable<double> data) {
    105       if (double.IsNaN(OriginalMean) || double.IsNaN(OriginalStandardDeviation))
     105      if (double.IsNaN(OriginalMean) || double.IsNaN(OriginalStandardDeviation)) //TODO isConfigured field?
    106106        Configure(data);
    107107
     
    112112      return InverseApply(data, TargetMean, TargetStandardDeviation, OriginalMean, OriginalStandardDeviation);
    113113    }
     114
    114115
    115116    public static IEnumerable<double> Apply(IEnumerable<double> data, double targetMean, double targetStandardDeviation, double originalMean = double.NaN, double originalStandardDeviation = double.NaN) {
Note: See TracChangeset for help on using the changeset viewer.