Changeset 8863 for branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/FeatureCorrelationCalculator.cs
- Timestamp:
- 10/30/12 16:22:04 (12 years ago)
- Location:
- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Problems.DataAnalysis.Views merged: 8831,8833,8840,8859,8861
- Property svn:mergeinfo changed
-
branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/FeatureCorrelationCalculator.cs
r8729 r8863 51 51 } 52 52 53 public void CalculateElements( FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitionspartition) {53 public void CalculateElements(IDependencyCalculator calc, string partition) { 54 54 CalculateElements(problemData.Dataset, calc, partition); 55 55 } 56 56 57 // returns if any calculation takes place58 public bool CalculateTimeframeElements( FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitionspartition, 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) { 59 59 if (correlation == null || correlation.GetLength(1) <= frames) { 60 60 CalculateElements(problemData.Dataset, calc, partition, variable, frames, correlation); … … 65 65 } 66 66 67 public void TryCancelCalculation() { 68 if (bw != null && bw.IsBusy) { 69 bwInfo = null; 70 bw.CancelAsync(); 71 } 72 } 73 67 74 private double[,] GetElementsOfCorrelation(double[,] corr, int frames) { 68 75 double[,] elements = new double[corr.GetLength(0), frames + 1]; … … 75 82 } 76 83 77 private void CalculateElements(Dataset dataset, FeatureCorrelationEnums.CorrelationCalculators calc, FeatureCorrelationEnums.Partitionspartition, 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) { 78 85 bwInfo = new BackgroundWorkerInfo { Dataset = dataset, Calculator = calc, Partition = partition, Variable = variable, Frames = frames, AlreadyCalculated = alreadyCalculated }; 79 86 if (bw == null) { … … 107 114 BackgroundWorkerInfo bwInfo = (BackgroundWorkerInfo)e.Argument; 108 115 Dataset dataset = bwInfo.Dataset; 109 FeatureCorrelationEnums.Partitionspartition = bwInfo.Partition;110 FeatureCorrelationEnums.CorrelationCalculatorscalc = bwInfo.Calculator;116 string partition = bwInfo.Partition; 117 IDependencyCalculator calc = bwInfo.Calculator; 111 118 112 119 IList<string> doubleVariableNames = dataset.DoubleVariables.ToList(); … … 121 128 for (int j = 0; j < i + 1; j++) { 122 129 if (worker.CancellationPending) { 130 worker.ReportProgress(100); 123 131 e.Cancel = true; 124 132 return; … … 127 135 IEnumerable<double> var2 = GetRelevantValues(problemData, partition, doubleVariableNames[j]); 128 136 129 elements[i, j] = CalculateElementWithCalculator(calc,var1, var2, out error);137 elements[i, j] = calc.Calculate(var1, var2, out error); 130 138 131 139 if (!error.Equals(OnlineCalculatorError.None)) { … … 137 145 } 138 146 e.Result = elements; 147 worker.ReportProgress(100); 139 148 } 140 149 … … 144 153 BackgroundWorkerInfo bwInfo = (BackgroundWorkerInfo)e.Argument; 145 154 Dataset dataset = bwInfo.Dataset; 146 FeatureCorrelationEnums.Partitionspartition = bwInfo.Partition;147 FeatureCorrelationEnums.CorrelationCalculatorscalc = bwInfo.Calculator;155 string partition = bwInfo.Partition; 156 IDependencyCalculator calc = bwInfo.Calculator; 148 157 string variable = bwInfo.Variable; 149 158 int frames = bwInfo.Frames; … … 169 178 for (int j = start; j <= frames; j++) { 170 179 if (worker.CancellationPending) { 180 worker.ReportProgress(100); 171 181 e.Cancel = true; 172 182 return; … … 181 191 var1 = help; 182 192 183 elements[i, j] = CalculateElementWithCalculator(calc,var1, var2, out error);193 elements[i, j] = calc.Calculate(var1, var2, out error); 184 194 185 195 if (!error.Equals(OnlineCalculatorError.None)) { … … 190 200 } 191 201 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) { 195 206 IEnumerable<double> var = problemData.Dataset.GetDoubleValues(variable); 196 if (partition.Equals(FeatureCorrelation Enums.Partitions.TrainingSamples)) {207 if (partition.Equals(FeatureCorrelationPartitions.TRAININGSAMPLES)) { 197 208 var = var.Skip(problemData.TrainingPartition.Start).Take(problemData.TrainingPartition.End - problemData.TrainingPartition.Start); 198 } else if (partition.Equals(FeatureCorrelation Enums.Partitions.TestSamples)) {209 } else if (partition.Equals(FeatureCorrelationPartitions.TESTSAMPLES)) { 199 210 var = var.Skip(problemData.TestPartition.Start).Take(problemData.TestPartition.End - problemData.TestPartition.Start); 200 211 } 201 212 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 }214 213 } 215 214 … … 222 221 OnCorrelationCalculationFinished((double[,])e.Result, bwInfo.Calculator, bwInfo.Partition, bwInfo.Variable); 223 222 } 224 } else {223 } else if (bwInfo != null) { 225 224 bw.RunWorkerAsync(bwInfo); 226 225 } … … 231 230 public class CorrelationCalculationFinishedArgs : EventArgs { 232 231 public double[,] Correlation { get; private set; } 233 public FeatureCorrelationEnums.CorrelationCalculatorsCalculcator { get; private set; }234 public FeatureCorrelationEnums.PartitionsPartition { get; private set; }232 public IDependencyCalculator Calculcator { get; private set; } 233 public string Partition { get; private set; } 235 234 public string Variable { get; private set; } 236 235 237 public CorrelationCalculationFinishedArgs(double[,] correlation, FeatureCorrelationEnums.CorrelationCalculators calculator, FeatureCorrelationEnums.Partitionspartition, string variable = null) {236 public CorrelationCalculationFinishedArgs(double[,] correlation, IDependencyCalculator calculator, string partition, string variable = null) { 238 237 this.Correlation = correlation; 239 238 this.Calculcator = calculator; … … 245 244 public delegate void CorrelationCalculationFinishedHandler(object sender, CorrelationCalculationFinishedArgs e); 246 245 public event CorrelationCalculationFinishedHandler CorrelationCalculationFinished; 247 protected virtual void OnCorrelationCalculationFinished(double[,] correlation, FeatureCorrelationEnums.CorrelationCalculators calculator, FeatureCorrelationEnums.Partitionspartition, string variable = null) {246 protected virtual void OnCorrelationCalculationFinished(double[,] correlation, IDependencyCalculator calculator, string partition, string variable = null) { 248 247 var handler = CorrelationCalculationFinished; 249 248 if (handler != null) … … 255 254 protected void BwProgressChanged(object sender, ProgressChangedEventArgs e) { 256 255 BackgroundWorker worker = sender as BackgroundWorker; 257 if ( !worker.CancellationPending &&ProgressCalculation != null) {256 if (ProgressCalculation != null) { 258 257 ProgressCalculation(sender, e); 259 258 } … … 263 262 private class BackgroundWorkerInfo { 264 263 public Dataset Dataset { get; set; } 265 public FeatureCorrelationEnums.CorrelationCalculatorsCalculator { get; set; }266 public FeatureCorrelationEnums.PartitionsPartition { get; set; }264 public IDependencyCalculator Calculator { get; set; } 265 public string Partition { get; set; } 267 266 public string Variable { get; set; } 268 267 public int Frames { get; set; }
Note: See TracChangeset
for help on using the changeset viewer.