Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/ShiftStandardDistributionTransformation.cs @ 16628

Last change on this file since 16628 was 16628, checked in by gkronber, 5 years ago

#2971: made branch compile with current version of trunk

File size: 4.5 KB
RevLine 
[10815]1using System.Collections.Generic;
[10784]2using System.Linq;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Data;
6using HeuristicLab.Parameters;
7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
[16628]8using HEAL.Attic;
[10784]9
[11068]10namespace HeuristicLab.Problems.DataAnalysis {
[16628]11  [StorableType("749355B1-2F87-4F52-886D-F4130E56476D")]
[10909]12  [Item("Shift Standard Distribution Transformation", "f(x) = ((x - m_org) / s_org ) * s_tar + m_tar | Represents Transformation to unit standard deviation and additional linear transformation to a target Mean and Standard deviation")]
[10841]13  public class ShiftStandardDistributionTransformation : Transformation<double> {
[10909]14    protected const string OriginalMeanParameterName = "Original Mean";
15    protected const string OriginalStandardDeviationParameterName = "Original Standard Deviation";
[10784]16    protected const string MeanParameterName = "Mean";
[10909]17    protected const string StandardDeviationParameterName = "Standard Deviation";
[10784]18
19    #region Parameters
[10815]20    public IValueParameter<DoubleValue> OriginalMeanParameter {
21      get { return (IValueParameter<DoubleValue>)Parameters[OriginalMeanParameterName]; }
22    }
23    public IValueParameter<DoubleValue> OriginalStandardDeviationParameter {
24      get { return (IValueParameter<DoubleValue>)Parameters[OriginalStandardDeviationParameterName]; }
25    }
[10784]26    public IValueParameter<DoubleValue> MeanParameter {
27      get { return (IValueParameter<DoubleValue>)Parameters[MeanParameterName]; }
28    }
[10815]29    public IValueParameter<DoubleValue> StandardDeviationParameter {
30      get { return (IValueParameter<DoubleValue>)Parameters[StandardDeviationParameterName]; }
[10784]31    }
32    #endregion
33
34    #region properties
[10932]35    public override string ShortName {
36      get { return "Std"; }
37    }
[10815]38    public double OriginalMean {
39      get { return OriginalMeanParameter.Value.Value; }
40      set { OriginalMeanParameter.Value.Value = value; }
41    }
42    public double OriginalStandardDeviation {
43      get { return OriginalStandardDeviationParameter.Value.Value; }
44      set { OriginalStandardDeviationParameter.Value.Value = value; }
45    }
[10784]46    public double Mean {
47      get { return MeanParameter.Value.Value; }
48    }
[10815]49    public double StandardDeviation {
50      get { return StandardDeviationParameter.Value.Value; }
[10784]51    }
52    #endregion
53
54    [StorableConstructor]
[16628]55    protected ShiftStandardDistributionTransformation(StorableConstructorFlag _) : base(_) { }
[11114]56    protected ShiftStandardDistributionTransformation(ShiftStandardDistributionTransformation original, Cloner cloner)
[10784]57      : base(original, cloner) {
58    }
[10841]59    public ShiftStandardDistributionTransformation(IEnumerable<string> allowedColumns)
[10784]60      : base(allowedColumns) {
[10815]61      Parameters.Add(new ValueParameter<DoubleValue>(OriginalMeanParameterName, "m_org | Mean value of the original data's deviation.", new DoubleValue()));
62      Parameters.Add(new ValueParameter<DoubleValue>(OriginalStandardDeviationParameterName, "s_org | Standard deviation of the original data.", new DoubleValue()));
63      OriginalMeanParameter.Hidden = true;
64      OriginalStandardDeviationParameter.Hidden = true;
65      Parameters.Add(new ValueParameter<DoubleValue>(MeanParameterName, "m_tar | Mean value for the target deviation.", new DoubleValue(0.0)));
66      Parameters.Add(new ValueParameter<DoubleValue>(StandardDeviationParameterName, "s_tar | Standard deviation for the target data.", new DoubleValue(1.0)));
[10784]67    }
68
69    public override IDeepCloneable Clone(Cloner cloner) {
[10841]70      return new ShiftStandardDistributionTransformation(this, cloner);
[10784]71    }
72
73    public override IEnumerable<double> Apply(IEnumerable<double> data) {
[12612]74      if (OriginalStandardDeviation.IsAlmost(0.0)) {
75        return data;
[10815]76      }
[12612]77      var old_m = OriginalMean;
78      var old_s = OriginalStandardDeviation;
79      var m = Mean;
80      var s = StandardDeviation;
81      return data
82        .Select(d => (d - old_m) / old_s) // standardized
83        .Select(d => d * s + m);
[10784]84    }
85
86    public override bool Check(IEnumerable<double> data, out string errorMsg) {
87      ConfigureParameters(data);
[10815]88      errorMsg = "";
[12612]89      if (OriginalStandardDeviation.IsAlmost(0.0)) {
[10816]90        errorMsg = "Standard deviaton for the original data is 0.0, Transformation cannot be applied onto these values.";
[10815]91        return false;
92      }
[10821]93      return true;
[10784]94    }
95
[14843]96    public override void ConfigureParameters(IEnumerable<double> data) {
[10815]97      OriginalStandardDeviation = data.StandardDeviation();
98      OriginalMean = data.Average();
[10784]99    }
100  }
101}
Note: See TracBrowser for help on using the repository browser.