source: branches/MetisMQI/src/test/java/weka/filters/supervised/instance/ResampleTest.java

Last change on this file was 29, checked in by gnappo, 15 years ago

Taggata versione per la demo e aggiunto branch.

File size: 5.1 KB
Line 
1/*
2 *    This program is free software; you can redistribute it and/or modify
3 *    it under the terms of the GNU General Public License as published by
4 *    the Free Software Foundation; either version 2 of the License, or
5 *    (at your option) any later version.
6 *
7 *    This program is distributed in the hope that it will be useful,
8 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 *    GNU General Public License for more details.
11 *
12 *    You should have received a copy of the GNU General Public License
13 *    along with this program; if not, write to the Free Software
14 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
15 */
16
17/*
18 * Copyright (C) 2002 University of Waikato
19 */
20
21package weka.filters.supervised.instance;
22
23import weka.core.AttributeStats;
24import weka.core.Instances;
25import weka.filters.AbstractFilterTest;
26import weka.filters.Filter;
27
28import junit.framework.Test;
29import junit.framework.TestSuite;
30
31/**
32 * Tests Resample. Run from the command line with:<p>
33 * java weka.filters.supervised.instance.ResampleTest
34 *
35 * @author <a href="mailto:len@reeltwo.com">Len Trigg</a>
36 * @version $Revision: 1.3 $
37 */
38public class ResampleTest
39  extends AbstractFilterTest {
40 
41  public ResampleTest(String name) { super(name);  }
42
43  /** Need to set the class index */
44  protected void setUp() throws Exception {
45    super.setUp();
46    m_Instances.setClassIndex(1);
47  }
48
49  /** Creates a default Resample */
50  public Filter getFilter() {
51    Resample f = new Resample();
52    f.setSampleSizePercent(50);
53    return f;
54  }
55
56  public void testSampleSizePercent() {
57    Instances result = useFilter();
58    assertEquals(m_Instances.numAttributes(), result.numAttributes());
59    assertEquals("Expecting output to be 50% of input",
60                 m_Instances.numInstances() / 2,  result.numInstances());
61
62    ((Resample)m_Filter).setSampleSizePercent(200);
63    result = useFilter();
64    assertEquals(m_Instances.numAttributes(), result.numAttributes());
65    assertEquals("Expecting output to be 200% of input",
66                 m_Instances.numInstances() * 2,  result.numInstances());
67  }
68
69  public void testSampleSizePercentNoReplacement() {
70    ((Resample) m_Filter).setSampleSizePercent(20);
71    ((Resample) m_Filter).setNoReplacement(true);
72    Instances result = useFilter();
73    assertEquals(m_Instances.numAttributes(), result.numAttributes());
74    assertEquals("Expecting output to be 20% of input",
75                 (int) (m_Instances.numInstances() * 20.0 / 100),  result.numInstances());
76  }
77
78  public void testSampleSizePercentNoReplacementInverted() {
79    ((Resample) m_Filter).setSampleSizePercent(20);
80    ((Resample) m_Filter).setNoReplacement(true);
81    ((Resample) m_Filter).setInvertSelection(true);
82    Instances result = useFilter();
83    assertEquals(m_Instances.numAttributes(), result.numAttributes());
84    assertEquals("Expecting output to be 80% of input (20% inverted)",
85                 m_Instances.numInstances() 
86                 - (int) (m_Instances.numInstances() * 20.0 / 100),  result.numInstances());
87  }
88
89  public void testNoBias() throws Exception {
90    m_Instances.setClassIndex(1);
91    AttributeStats origs = m_Instances.attributeStats(1);
92    assertNotNull(origs.nominalCounts);
93
94    Instances result = useFilter();
95    assertEquals(m_Instances.numAttributes(), result.numAttributes());
96    AttributeStats outs = result.attributeStats(1);
97
98    // Check distributions are pretty similar
99    assertNotNull(outs.nominalCounts);
100    assertEquals(origs.nominalCounts.length, outs.nominalCounts.length);
101    for (int i = 0; i < origs.nominalCounts.length; i++) {
102      int est = origs.nominalCounts[i] / 2 - 1;
103      assertTrue("Counts for value:" + i
104             + " orig:" + origs.nominalCounts[i] 
105             + " out50%:" + outs.nominalCounts[i], 
106             (est <= outs.nominalCounts[i]) &&
107             (outs.nominalCounts[i] <= (est + 3)));
108    }
109  }
110
111  public void testBiasToUniform() throws Exception {
112    m_Instances.setClassIndex(1);
113    AttributeStats origs = m_Instances.attributeStats(1);
114    assertNotNull(origs.nominalCounts);
115   
116    ((Resample)m_Filter).setBiasToUniformClass(1.0);
117    Instances result = useFilter();
118    assertEquals(m_Instances.numAttributes(), result.numAttributes());
119    AttributeStats outs = result.attributeStats(1);
120
121    // Check distributions are pretty similar
122    assertNotNull(outs.nominalCounts);
123    assertEquals(origs.nominalCounts.length, outs.nominalCounts.length);
124    int est = (origs.totalCount - origs.missingCount) / origs.distinctCount;
125    est = est / 2 - 1;
126    for (int i = 0; i < origs.nominalCounts.length; i++) {
127      assertTrue("Counts for value:" + i
128             + " orig:" + origs.nominalCounts[i] 
129             + " out50%:" + outs.nominalCounts[i]
130             + " ~wanted:" + est,
131             (est <= outs.nominalCounts[i]) &&
132             (outs.nominalCounts[i] <= (est + 3)));
133    }
134  }
135
136  public static Test suite() {
137    return new TestSuite(ResampleTest.class);
138  }
139
140  public static void main(String[] args){
141    junit.textui.TestRunner.run(suite());
142  }
143
144}
Note: See TracBrowser for help on using the repository browser.