Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/ThresholdCalculatorsTest.cs @ 8638

Last change on this file since 8638 was 8638, checked in by gkronber, 12 years ago

#1925 implemented improvements for the NormalDistributionCutPointsThresholdCalculator

File size: 5.4 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HeuristicLab.Problems.DataAnalysis;
23using Microsoft.VisualStudio.TestTools.UnitTesting;
24namespace HeuristicLab.Problems.DataAnalysis_34.Tests {
25
26  [TestClass()]
27  public class ThresholdCalculatorsTest {
28    [TestMethod]
29    public void NormalDistributionCutPointsThresholdCalculatorTest() {
30
31      {
32        // simple two-class case
33        double[] estimatedValues = new double[] { 1.0, 0.99, 1.01, 2.0, 1.99, 2.01 };
34        double[] targetClassValues = new double[] { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0 };
35        double[] classValues;
36        double[] thresholds;
37        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(null, estimatedValues, targetClassValues,
38                                                                           out classValues, out thresholds);
39
40        var expectedClassValues = new double[] { 0.0, 1.0 };
41        var expectedTresholds = new double[] { double.NegativeInfinity, 1.5 };
42
43        AssertEqual(expectedClassValues, classValues);
44        AssertEqual(expectedTresholds, thresholds);
45      }
46
47      {
48        // switched classes two-class case
49        double[] estimatedValues = new double[] { 1.0, 0.99, 1.01, 2.0, 1.99, 2.01 };
50        double[] targetClassValues = new double[] { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
51        double[] classValues;
52        double[] thresholds;
53        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(null, estimatedValues, targetClassValues,
54                                                                           out classValues, out thresholds);
55
56        var expectedClassValues = new double[] { 1.0, 0.0 };
57        var expectedTresholds = new double[] { double.NegativeInfinity, 1.5 };
58
59        AssertEqual(expectedClassValues, classValues);
60        AssertEqual(expectedTresholds, thresholds);
61      }
62
63      {
64        // three-class case with permutated estimated values
65        double[] estimatedValues = new double[] { 1.0, 0.99, 1.01, 2.0, 1.99, 2.01, -1.0, -0.99, -1.01 };
66        double[] targetClassValues = new double[] { 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0 };
67        double[] classValues;
68        double[] thresholds;
69        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(null, estimatedValues, targetClassValues,
70                                                                           out classValues, out thresholds);
71
72        var expectedClassValues = new double[] { 1.0, 2.0, 0.0 };
73        var expectedTresholds = new double[] { double.NegativeInfinity, 0.0, 1.5 };
74
75        AssertEqual(expectedClassValues, classValues);
76        AssertEqual(expectedTresholds, thresholds);
77      }
78
79      {
80        // constant output values for all classes
81        double[] estimatedValues = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
82        double[] targetClassValues = new double[] { 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0 };
83        double[] classValues;
84        double[] thresholds;
85        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(null, estimatedValues, targetClassValues,
86                                                                           out classValues, out thresholds);
87
88        var expectedClassValues = new double[] { 0.0 };
89        var expectedTresholds = new double[] { double.NegativeInfinity };
90
91        AssertEqual(expectedClassValues, classValues);
92        AssertEqual(expectedTresholds, thresholds);
93      }
94
95      {
96        // constant output values for two of three classes
97        double[] estimatedValues = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -0.99, -1.01 };
98        double[] targetClassValues = new double[] { 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0 };
99        double[] classValues;
100        double[] thresholds;
101        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(null, estimatedValues, targetClassValues,
102                                                                           out classValues, out thresholds);
103
104
105        var expectedClassValues = new double[] { 1.0, 0.0, 1.0 };
106        double range = 1.0 + 1.01;
107        var expectedTresholds = new double[] { double.NegativeInfinity, 1.0 - 0.001 * range, 1.0 + 0.001 * range };
108
109        AssertEqual(expectedClassValues, classValues);
110        AssertEqual(expectedTresholds, thresholds);
111      }
112
113    }
114
115
116    private static void AssertEqual(double[] expected, double[] actual) {
117      Assert.AreEqual(expected.Length, actual.Length);
118      for (int i = 0; i < expected.Length; i++)
119        Assert.AreEqual(expected[i], actual[i]);
120    }
121  }
122}
Note: See TracBrowser for help on using the repository browser.