Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/30/12 16:22:04 (12 years ago)
Author:
sforsten
Message:

#1776:

  • merged r8810:8862 from trunk into branch
  • fixed exception in ClassificationEnsembleSolutionAccuracyToCoveredSamples, if no estimated values are in a partition, so nothing can be shown
Location:
branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views

  • branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/FeatureCorrelationCalculator.cs

    r8729 r8863  
    5151    }
    5252
    53     public void CalculateElements(FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitions partition) {
     53    public void CalculateElements(IDependencyCalculator calc, string partition) {
    5454      CalculateElements(problemData.Dataset, calc, partition);
    5555    }
    5656
    57     // returns if any calculation takes place
    58     public bool CalculateTimeframeElements(FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitions partition, string variable, int frames, double[,] correlation = null) {
     57    // returns true if any calculation takes place
     58    public bool CalculateTimeframeElements(IDependencyCalculator calc, string partition, string variable, int frames, double[,] correlation = null) {
    5959      if (correlation == null || correlation.GetLength(1) <= frames) {
    6060        CalculateElements(problemData.Dataset, calc, partition, variable, frames, correlation);
     
    6565    }
    6666
     67    public void TryCancelCalculation() {
     68      if (bw != null && bw.IsBusy) {
     69        bwInfo = null;
     70        bw.CancelAsync();
     71      }
     72    }
     73
    6774    private double[,] GetElementsOfCorrelation(double[,] corr, int frames) {
    6875      double[,] elements = new double[corr.GetLength(0), frames + 1];
     
    7582    }
    7683
    77     private void CalculateElements(Dataset dataset, FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitions partition, string variable = null, int frames = 0, double[,] alreadyCalculated = null) {
     84    private void CalculateElements(Dataset dataset, IDependencyCalculator calc, string partition, string variable = null, int frames = 0, double[,] alreadyCalculated = null) {
    7885      bwInfo = new BackgroundWorkerInfo { Dataset = dataset, Calculator = calc, Partition = partition, Variable = variable, Frames = frames, AlreadyCalculated = alreadyCalculated };
    7986      if (bw == null) {
     
    107114      BackgroundWorkerInfo bwInfo = (BackgroundWorkerInfo)e.Argument;
    108115      Dataset dataset = bwInfo.Dataset;
    109       FeatureCorrelationEnums.Partitions partition = bwInfo.Partition;
    110       FeatureCorrelationEnums.CorrelationCalculators calc = bwInfo.Calculator;
     116      string partition = bwInfo.Partition;
     117      IDependencyCalculator calc = bwInfo.Calculator;
    111118
    112119      IList<string> doubleVariableNames = dataset.DoubleVariables.ToList();
     
    121128        for (int j = 0; j < i + 1; j++) {
    122129          if (worker.CancellationPending) {
     130            worker.ReportProgress(100);
    123131            e.Cancel = true;
    124132            return;
     
    127135          IEnumerable<double> var2 = GetRelevantValues(problemData, partition, doubleVariableNames[j]);
    128136
    129           elements[i, j] = CalculateElementWithCalculator(calc, var1, var2, out error);
     137          elements[i, j] = calc.Calculate(var1, var2, out error);
    130138
    131139          if (!error.Equals(OnlineCalculatorError.None)) {
     
    137145      }
    138146      e.Result = elements;
     147      worker.ReportProgress(100);
    139148    }
    140149
     
    144153      BackgroundWorkerInfo bwInfo = (BackgroundWorkerInfo)e.Argument;
    145154      Dataset dataset = bwInfo.Dataset;
    146       FeatureCorrelationEnums.Partitions partition = bwInfo.Partition;
    147       FeatureCorrelationEnums.CorrelationCalculators calc = bwInfo.Calculator;
     155      string partition = bwInfo.Partition;
     156      IDependencyCalculator calc = bwInfo.Calculator;
    148157      string variable = bwInfo.Variable;
    149158      int frames = bwInfo.Frames;
     
    169178        for (int j = start; j <= frames; j++) {
    170179          if (worker.CancellationPending) {
     180            worker.ReportProgress(100);
    171181            e.Cancel = true;
    172182            return;
     
    181191          var1 = help;
    182192
    183           elements[i, j] = CalculateElementWithCalculator(calc, var1, var2, out error);
     193          elements[i, j] = calc.Calculate(var1, var2, out error);
    184194
    185195          if (!error.Equals(OnlineCalculatorError.None)) {
     
    190200      }
    191201      e.Result = elements;
    192     }
    193 
    194     private IEnumerable<double> GetRelevantValues(IDataAnalysisProblemData problemData, FeatureCorrelationEnums.Partitions partition, string variable) {
     202      worker.ReportProgress(100);
     203    }
     204
     205    private IEnumerable<double> GetRelevantValues(IDataAnalysisProblemData problemData, string partition, string variable) {
    195206      IEnumerable<double> var = problemData.Dataset.GetDoubleValues(variable);
    196       if (partition.Equals(FeatureCorrelationEnums.Partitions.TrainingSamples)) {
     207      if (partition.Equals(FeatureCorrelationPartitions.TRAININGSAMPLES)) {
    197208        var = var.Skip(problemData.TrainingPartition.Start).Take(problemData.TrainingPartition.End - problemData.TrainingPartition.Start);
    198       } else if (partition.Equals(FeatureCorrelationEnums.Partitions.TestSamples)) {
     209      } else if (partition.Equals(FeatureCorrelationPartitions.TESTSAMPLES)) {
    199210        var = var.Skip(problemData.TestPartition.Start).Take(problemData.TestPartition.End - problemData.TestPartition.Start);
    200211      }
    201212      return var;
    202     }
    203 
    204     private double CalculateElementWithCalculator(FeatureCorrelationEnums.CorrelationCalculators calc, IEnumerable<double> var1, IEnumerable<double> var2, out OnlineCalculatorError error) {
    205       if (calc.Equals(FeatureCorrelationEnums.CorrelationCalculators.HoeffdingsDependence)) {
    206         return HoeffdingsDependenceCalculator.Calculate(var1, var2, out error);
    207       } else if (calc.Equals(FeatureCorrelationEnums.CorrelationCalculators.SpearmansRank)) {
    208         return SpearmansRankCorrelationCoefficientCalculator.Calculate(var1, var2, out error);
    209       } else if (calc.Equals(FeatureCorrelationEnums.CorrelationCalculators.PearsonsRSquared)) {
    210         return OnlinePearsonsRSquaredCalculator.Calculate(var1, var2, out error);
    211       } else {
    212         return Math.Sqrt(OnlinePearsonsRSquaredCalculator.Calculate(var1, var2, out error));
    213       }
    214213    }
    215214
     
    222221          OnCorrelationCalculationFinished((double[,])e.Result, bwInfo.Calculator, bwInfo.Partition, bwInfo.Variable);
    223222        }
    224       } else {
     223      } else if (bwInfo != null) {
    225224        bw.RunWorkerAsync(bwInfo);
    226225      }
     
    231230    public class CorrelationCalculationFinishedArgs : EventArgs {
    232231      public double[,] Correlation { get; private set; }
    233       public FeatureCorrelationEnums.CorrelationCalculators Calculcator { get; private set; }
    234       public FeatureCorrelationEnums.Partitions Partition { get; private set; }
     232      public IDependencyCalculator Calculcator { get; private set; }
     233      public string Partition { get; private set; }
    235234      public string Variable { get; private set; }
    236235
    237       public CorrelationCalculationFinishedArgs(double[,] correlation, FeatureCorrelationEnums.CorrelationCalculators calculator, FeatureCorrelationEnums.Partitions partition, string variable = null) {
     236      public CorrelationCalculationFinishedArgs(double[,] correlation, IDependencyCalculator calculator, string partition, string variable = null) {
    238237        this.Correlation = correlation;
    239238        this.Calculcator = calculator;
     
    245244    public delegate void CorrelationCalculationFinishedHandler(object sender, CorrelationCalculationFinishedArgs e);
    246245    public event CorrelationCalculationFinishedHandler CorrelationCalculationFinished;
    247     protected virtual void OnCorrelationCalculationFinished(double[,] correlation, FeatureCorrelationEnums.CorrelationCalculators calculator, FeatureCorrelationEnums.Partitions partition, string variable = null) {
     246    protected virtual void OnCorrelationCalculationFinished(double[,] correlation, IDependencyCalculator calculator, string partition, string variable = null) {
    248247      var handler = CorrelationCalculationFinished;
    249248      if (handler != null)
     
    255254    protected void BwProgressChanged(object sender, ProgressChangedEventArgs e) {
    256255      BackgroundWorker worker = sender as BackgroundWorker;
    257       if (!worker.CancellationPending && ProgressCalculation != null) {
     256      if (ProgressCalculation != null) {
    258257        ProgressCalculation(sender, e);
    259258      }
     
    263262    private class BackgroundWorkerInfo {
    264263      public Dataset Dataset { get; set; }
    265       public FeatureCorrelationEnums.CorrelationCalculators Calculator { get; set; }
    266       public FeatureCorrelationEnums.Partitions Partition { get; set; }
     264      public IDependencyCalculator Calculator { get; set; }
     265      public string Partition { get; set; }
    267266      public string Variable { get; set; }
    268267      public int Frames { get; set; }
Note: See TracChangeset for help on using the changeset viewer.