Changeset 12492
- Timestamp:
- 06/22/15 20:04:01 (9 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4
- Files:
-
- 3 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
r11763 r12492 222 222 <Compile Include="OnlineCalculators\OnlineMeanSquaredErrorCalculator.cs" /> 223 223 <Compile Include="OnlineCalculators\OnlineNormalizedMeanSquaredErrorCalculator.cs" /> 224 <Compile Include="OnlineCalculators\OnlinePearsonsRCalculator.cs" /> 224 225 <Compile Include="OnlineCalculators\OnlinePearsonsRSquaredCalculator.cs" /> 225 226 <Compile Include="Implementation\Regression\RegressionSolution.cs" /> -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/DependencyCalculator/PearsonsRDependenceCalculator.cs
r12012 r12492 33 33 34 34 public double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) { 35 return Math.Sqrt(OnlinePearsonsRSquaredCalculator.Calculate(originalValues, estimatedValues, out errorState));35 return OnlinePearsonsRCalculator.Calculate(originalValues, estimatedValues, out errorState); 36 36 } 37 37 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRCalculator.cs
r12491 r12492 25 25 26 26 namespace HeuristicLab.Problems.DataAnalysis { 27 public class OnlinePearsonsR SquaredCalculator : IOnlineCalculator {27 public class OnlinePearsonsRCalculator : IOnlineCalculator { 28 28 private OnlineCovarianceCalculator covCalculator = new OnlineCovarianceCalculator(); 29 29 private OnlineMeanAndVarianceCalculator sxCalculator = new OnlineMeanAndVarianceCalculator(); 30 30 private OnlineMeanAndVarianceCalculator syCalculator = new OnlineMeanAndVarianceCalculator(); 31 31 32 public double R Squared{32 public double R { 33 33 get { 34 34 double xVar = sxCalculator.PopulationVariance; … … 37 37 return 0.0; 38 38 } else { 39 double r = covCalculator.Covariance / (Math.Sqrt(xVar) * Math.Sqrt(yVar)); 40 return r * r; 39 return covCalculator.Covariance / (Math.Sqrt(xVar) * Math.Sqrt(yVar)); 41 40 } 42 41 } 43 42 } 44 43 45 public OnlinePearsonsR SquaredCalculator() { }44 public OnlinePearsonsRCalculator() { } 46 45 47 46 #region IOnlineCalculator Members … … 50 49 } 51 50 public double Value { 52 get { return R Squared; }51 get { return R; } 53 52 } 54 53 public void Reset() { … … 70 69 IEnumerator<double> firstEnumerator = first.GetEnumerator(); 71 70 IEnumerator<double> secondEnumerator = second.GetEnumerator(); 72 OnlinePearsonsRSquaredCalculator rSquaredCalculator = new OnlinePearsonsRSquaredCalculator();71 var calculator = new OnlinePearsonsRCalculator(); 73 72 74 73 // always move forward both enumerators (do not use short-circuit evaluation!) … … 76 75 double original = firstEnumerator.Current; 77 76 double estimated = secondEnumerator.Current; 78 rSquaredCalculator.Add(original, estimated);79 if ( rSquaredCalculator.ErrorState != OnlineCalculatorError.None) break;77 calculator.Add(original, estimated); 78 if (calculator.ErrorState != OnlineCalculatorError.None) break; 80 79 } 81 80 82 81 // check if both enumerators are at the end to make sure both enumerations have the same length 83 if ( rSquaredCalculator.ErrorState == OnlineCalculatorError.None &&82 if (calculator.ErrorState == OnlineCalculatorError.None && 84 83 (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) { 85 84 throw new ArgumentException("Number of elements in first and second enumeration doesn't match."); 86 85 } else { 87 errorState = rSquaredCalculator.ErrorState;88 return rSquaredCalculator.RSquared;86 errorState = calculator.ErrorState; 87 return calculator.R; 89 88 } 90 89 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs
r12012 r12492 25 25 26 26 namespace HeuristicLab.Problems.DataAnalysis { 27 [Obsolete("Use OnlinePearsonsRCalculator directly")] 27 28 public class OnlinePearsonsRSquaredCalculator : IOnlineCalculator { 28 private OnlineCovarianceCalculator covCalculator = new OnlineCovarianceCalculator(); 29 private OnlineMeanAndVarianceCalculator sxCalculator = new OnlineMeanAndVarianceCalculator(); 30 private OnlineMeanAndVarianceCalculator syCalculator = new OnlineMeanAndVarianceCalculator(); 29 private readonly OnlinePearsonsRCalculator rCalculator = new OnlinePearsonsRCalculator(); 31 30 32 31 public double RSquared { 33 32 get { 34 double xVar = sxCalculator.PopulationVariance; 35 double yVar = syCalculator.PopulationVariance; 36 if (xVar.IsAlmost(0.0) || yVar.IsAlmost(0.0)) { 37 return 0.0; 38 } else { 39 double r = covCalculator.Covariance / (Math.Sqrt(xVar) * Math.Sqrt(yVar)); 40 return r * r; 41 } 33 if (rCalculator.ErrorState != OnlineCalculatorError.None) return 0.0; 34 else return rCalculator.R * rCalculator.R; 42 35 } 43 36 } … … 47 40 #region IOnlineCalculator Members 48 41 public OnlineCalculatorError ErrorState { 49 get { return covCalculator.ErrorState | sxCalculator.PopulationVarianceErrorState | syCalculator.PopulationVarianceErrorState; }42 get { return rCalculator.ErrorState; } 50 43 } 51 44 public double Value { … … 53 46 } 54 47 public void Reset() { 55 covCalculator.Reset(); 56 sxCalculator.Reset(); 57 syCalculator.Reset(); 48 rCalculator.Reset(); 58 49 } 59 50 60 51 public void Add(double x, double y) { 61 // no need to check validity of values explicitly here as it is checked in all three evaluators 62 covCalculator.Add(x, y); 63 sxCalculator.Add(x); 64 syCalculator.Add(y); 52 rCalculator.Add(x, y); 65 53 } 66 54 … … 68 56 69 57 public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) { 70 IEnumerator<double> firstEnumerator = first.GetEnumerator(); 71 IEnumerator<double> secondEnumerator = second.GetEnumerator(); 72 OnlinePearsonsRSquaredCalculator rSquaredCalculator = new OnlinePearsonsRSquaredCalculator(); 73 74 // always move forward both enumerators (do not use short-circuit evaluation!) 75 while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) { 76 double original = firstEnumerator.Current; 77 double estimated = secondEnumerator.Current; 78 rSquaredCalculator.Add(original, estimated); 79 if (rSquaredCalculator.ErrorState != OnlineCalculatorError.None) break; 80 } 81 82 // check if both enumerators are at the end to make sure both enumerations have the same length 83 if (rSquaredCalculator.ErrorState == OnlineCalculatorError.None && 84 (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) { 85 throw new ArgumentException("Number of elements in first and second enumeration doesn't match."); 86 } else { 87 errorState = rSquaredCalculator.ErrorState; 88 return rSquaredCalculator.RSquared; 89 } 58 var r = OnlinePearsonsRCalculator.Calculate(first, second, out errorState); 59 return r * r; 90 60 } 91 61 }
Note: See TracChangeset
for help on using the changeset viewer.