From: Yoav F. <yf...@us...> - 2008-09-15 15:24:49
|
Update of /cvsroot/jboost/jboost/src/jboost/visualization In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv16557/src/jboost/visualization Modified Files: DataSet.java HistogramFrame.java Log Message: VisualizeScores.py can now be used to select a range of scores at a particular iteration and output the indices of the examples whose score is in that range into a file. Index: DataSet.java =================================================================== RCS file: /cvsroot/jboost/jboost/src/jboost/visualization/DataSet.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** DataSet.java 11 Sep 2008 22:49:10 -0000 1.5 --- DataSet.java 15 Sep 2008 22:24:44 -0000 1.6 *************** *** 1,16 **** package jboost.visualization; import java.util.ArrayList; - import java.util.Arrays; import java.util.Collections; - import java.util.List; import java.util.Random; - import java.util.ArrayList; - import java.util.Vector; - import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYIntervalSeries; import org.jfree.data.xy.XYSeries; - import org.jfree.data.xy.XYSeriesCollection; /** --- 1,12 ---- package jboost.visualization; + import java.io.FileOutputStream; + import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; import java.util.Random; import org.jfree.data.xy.XYIntervalSeries; import org.jfree.data.xy.XYSeries; /** *************** *** 24,27 **** --- 20,25 ---- private int iteration=0; + private String outputFilename = "ExamplesDumpFile.txt"; + /** * data is a list of ArrayLists, each list element corresponds to a (boosting) iteration, *************** *** 166,170 **** ArrayList<DataElement> iterData = data.get(iteration); for(int i=0; i<bins; i++) { ! DataElement e = binarySearch(iterData, s); //System.out.printf("label=%d, i= %d, s=%f, prev=%f, e=",label,i,s,prev); //System.out.println(e); --- 164,168 ---- ArrayList<DataElement> iterData = data.get(iteration); for(int i=0; i<bins; i++) { ! DataElement e = iterData.get(binarySearch(iterData, s)); //System.out.printf("label=%d, i= %d, s=%f, prev=%f, e=",label,i,s,prev); //System.out.println(e); *************** *** 182,189 **** } ! private DataElement binarySearch(ArrayList<DataElement> list, double s) { int l=list.size(); ! if(s<list.get(0).value) return list.get(0); ! if(s>list.get(l-1).value) return list.get(list.size()-1); double l2=Math.floor(Math.log((double) l)/Math.log(2.0)); --- 180,222 ---- } ! public void printScores(String iterName, double lowerScore, double upperScore) { ! ! PrintStream out=null; ! try{ ! // Create file ! ! FileOutputStream fstream = new FileOutputStream(outputFilename); ! out = new PrintStream(fstream); ! }catch (Exception e){//Catch exception if any ! System.err.println("Error: " + e.getMessage()); ! } ! ! out.printf("Iteration = %s, low=%f,high=%f%n", iterName,lowerScore,upperScore); ! ArrayList<DataElement> iterData = data.get(iteration); ! int i=binarySearch(iterData, lowerScore); ! DataElement e = iterData.get(i); ! if(e.value<lowerScore && i<iterData.size()) { ! i++; ! e = iterData.get(i); ! } ! while(e.value<=upperScore) { ! out.printf("%f\t%d\t%d%n",e.value,e.label,e.index); ! i++; ! if(i>=iterData.size()) break; ! e = iterData.get(i); ! } ! ! try { ! out.close(); ! } catch (Exception e1){//Catch exception if any ! System.err.println("Error: " + e1.getMessage()); ! } ! ! } ! ! private int binarySearch(ArrayList<DataElement> list, double s) { int l=list.size(); ! if(s<list.get(0).value) return 0; ! if(s>list.get(l-1).value) return list.size()-1; double l2=Math.floor(Math.log((double) l)/Math.log(2.0)); *************** *** 199,203 **** step=step/2; } ! return e; } --- 232,236 ---- step=step/2; } ! return index; } *************** *** 215,219 **** public double[] getFPTP(double v) { ! DataElement e = binarySearch(data.get(iteration),v); double[] answer = {e.falsePositives/total_neg,e.truePositives/total_pos}; return answer; --- 248,254 ---- public double[] getFPTP(double v) { ! ! ArrayList<DataElement> iterData = data.get(iteration); ! DataElement e = iterData.get(binarySearch(iterData,v)); double[] answer = {e.falsePositives/total_neg,e.truePositives/total_pos}; return answer; *************** *** 234,237 **** --- 269,276 ---- } + public void setOutputFilename(String name) { + outputFilename = name; + } + /** * @return the iterList Index: HistogramFrame.java =================================================================== RCS file: /cvsroot/jboost/jboost/src/jboost/visualization/HistogramFrame.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** HistogramFrame.java 11 Sep 2008 22:49:10 -0000 1.5 --- HistogramFrame.java 15 Sep 2008 22:24:44 -0000 1.6 *************** *** 2,5 **** --- 2,7 ---- import java.awt.Color; import java.awt.GradientPaint; + import java.awt.event.ActionEvent; + import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import javax.swing.BorderFactory; *************** *** 7,10 **** --- 9,13 ---- import javax.swing.BoxLayout; import javax.swing.DefaultComboBoxModel; + import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JList; *************** *** 83,87 **** private int negLabel=-1; private int posLabel=+1; - private double[] negClassScores,posClassScores; private XYIntervalSeriesCollection histogramDataset; --- 86,89 ---- *************** *** 97,106 **** --- 99,112 ---- private JSplitPane jSplitPane2; private String[] iterNoList; + private static int iter; //number of current iteration entry iterNoList[iter] is the String associated with the iteration. private static double upper_limit; private static double lower_limit; + private static double upperMarkerScore,lowerMarkerScore; private static IntervalMarker histMarker; private static ValueMarker lower_tprMarker, lower_fprMarker; //markers for ROC graph + private JButton jButton1; + private JSplitPane jSplitPane3; private static ValueMarker upper_tprMarker, upper_fprMarker; //markers for ROC graph *************** *** 148,152 **** jSplitPane2.add(jList1, JSplitPane.RIGHT); jList1.setModel(jList1Model); ! jList1.setPreferredSize(new java.awt.Dimension(85, 408)); jList1.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { --- 154,163 ---- jSplitPane2.add(jList1, JSplitPane.RIGHT); jList1.setModel(jList1Model); ! jList1.setPreferredSize(new java.awt.Dimension(48, 408)); ! jList1.setFocusable(false); ! jList1.setMaximumSize(new java.awt.Dimension(30, 400)); ! jList1.setMinimumSize(new java.awt.Dimension(30, 400)); ! jList1.setIgnoreRepaint(true); ! jList1.setLocation(new java.awt.Point(30, 400)); jList1.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { *************** *** 154,158 **** if(!evt.getValueIsAdjusting()) { JList list = (JList) evt.getSource(); ! int iter = list.getSelectedIndex(); System.out.printf("jList1.valueChanged, item index=%d, id=%s%n",iter,list.getSelectedValue()); rawData.setIteration(iter); //update the rawDataSet according to the new iteration. --- 165,169 ---- if(!evt.getValueIsAdjusting()) { JList list = (JList) evt.getSource(); ! iter = list.getSelectedIndex(); System.out.printf("jList1.valueChanged, item index=%d, id=%s%n",iter,list.getSelectedValue()); rawData.setIteration(iter); //update the rawDataSet according to the new iteration. *************** *** 170,173 **** --- 181,185 ---- }); } + jSplitPane2.setFocusCycleRoot(true); } thisLayout.setVerticalGroup(thisLayout.createSequentialGroup() *************** *** 188,191 **** --- 200,204 ---- jSplitPane1.setDividerLocation(400); jSplitPane1.setDoubleBuffered(true); + jSplitPane1.setLastDividerLocation(100); { jPanel1 = new JPanel(); *************** *** 201,213 **** histogramChart = createHistogramChart(histogramDataset, fluctDataset); - double initialLocation = (upper_limit+lower_limit)/2.0; - histMarker = new IntervalMarker(initialLocation,initialLocation); - XYPlot plot = (XYPlot) histogramChart.getPlot(); - plot.addDomainMarker(histMarker, Layer.BACKGROUND); - histogramPanel = new ChartPanel(histogramChart); jPanel1.add(histogramPanel); histogramPanel.setPopupMenu(null); ! histogramPanel.setPreferredSize(new java.awt.Dimension(10, 374)); } } --- 214,221 ---- histogramChart = createHistogramChart(histogramDataset, fluctDataset); histogramPanel = new ChartPanel(histogramChart); jPanel1.add(histogramPanel); histogramPanel.setPopupMenu(null); ! histogramPanel.setPreferredSize(new java.awt.Dimension(433, 374)); } } *************** *** 221,232 **** jPanel2.setOpaque(false); { ! rocDataset = new XYSeriesCollection(); ! XYSeries rocSeries = rawData.generateRoC(negLabel,posLabel); ! rocDataset.addSeries(rocSeries); ! rocChart = createRocChart(rocDataset); ! rocPanel = new ChartPanel(rocChart); ! jPanel2.add(rocPanel); ! rocPanel.setPopupMenu(null); ! rocPanel.setPreferredSize(new java.awt.Dimension(10, 406)); } } --- 229,261 ---- jPanel2.setOpaque(false); { ! jSplitPane3 = new JSplitPane(); ! jPanel2.add(jSplitPane3); ! jSplitPane3.setPreferredSize(new java.awt.Dimension(166, 406)); ! jSplitPane3.setLastDividerLocation(100); ! jSplitPane3.setOrientation(JSplitPane.VERTICAL_SPLIT); ! jSplitPane3.setDividerLocation(350); ! { ! rocDataset = new XYSeriesCollection(); ! XYSeries rocSeries = rawData.generateRoC(negLabel,posLabel); ! rocDataset.addSeries(rocSeries); ! rocChart = createRocChart(rocDataset); ! rocPanel = new ChartPanel(rocChart); ! jSplitPane3.add(rocPanel, JSplitPane.TOP); ! rocPanel.setPopupMenu(null); ! rocPanel.setPreferredSize(new java.awt.Dimension(10, 406)); ! } ! { ! jButton1 = new JButton(); ! jSplitPane3.add(jButton1, JSplitPane.BOTTOM); ! jButton1.setText("Print Example Indices"); ! jButton1.setPreferredSize(new java.awt.Dimension(22, 22)); ! jButton1.setSize(20, 20); ! jButton1.addActionListener(new ActionListener() { ! public void actionPerformed(ActionEvent evt) { ! System.out.println("jButton1.actionPerformed, event="+evt); ! rawData.printScores(iterNoList[iter], lowerMarkerScore, upperMarkerScore); ! } ! }); ! } } } *************** *** 260,267 **** private void updateUpperMarker() { int pos = (int)jSlider1.getValue(); ! double v=lower_limit+pos*(upper_limit-lower_limit)/100.0; ! histMarker.setEndValue(v); if (!jSlider1.getValueIsAdjusting()) { ! double[] FPTP = rawData.getFPTP(v); upper_fprMarker.setValue(FPTP[0]); upper_tprMarker.setValue(FPTP[1]); --- 289,296 ---- private void updateUpperMarker() { int pos = (int)jSlider1.getValue(); ! upperMarkerScore=lower_limit+pos*(upper_limit-lower_limit)/100.0; ! histMarker.setEndValue(upperMarkerScore); if (!jSlider1.getValueIsAdjusting()) { ! double[] FPTP = rawData.getFPTP(upperMarkerScore); upper_fprMarker.setValue(FPTP[0]); upper_tprMarker.setValue(FPTP[1]); *************** *** 271,278 **** private void updateLowerMarker() { int pos = (int)jSlider2.getValue(); ! double v=lower_limit+pos*(upper_limit-lower_limit)/100.0; ! histMarker.setStartValue(v); if (!jSlider2.getValueIsAdjusting()) { ! double[] FPTP = rawData.getFPTP(v); lower_fprMarker.setValue(FPTP[0]); lower_tprMarker.setValue(FPTP[1]); --- 300,307 ---- private void updateLowerMarker() { int pos = (int)jSlider2.getValue(); ! lowerMarkerScore=lower_limit+pos*(upper_limit-lower_limit)/100.0; ! histMarker.setStartValue(lowerMarkerScore); if (!jSlider2.getValueIsAdjusting()) { ! double[] FPTP = rawData.getFPTP(lowerMarkerScore); lower_fprMarker.setValue(FPTP[0]); lower_tprMarker.setValue(FPTP[1]); *************** *** 328,335 **** renderer1.setSeriesPaint(1,Color.red); renderer1.setUseYInterval(true); ! XYPlot histPlot = new XYPlot(histogramDataset, ! null, ! new NumberAxis("count"), ! renderer1); XYBarRenderer renderer2 = new XYBarRenderer(); --- 357,364 ---- renderer1.setSeriesPaint(1,Color.red); renderer1.setUseYInterval(true); ! XYPlot histPlot = new XYPlot(histogramDataset, ! null, ! new NumberAxis("count"), ! renderer1); XYBarRenderer renderer2 = new XYBarRenderer(); *************** *** 337,345 **** renderer2.setSeriesPaint(1, Color.orange); renderer2.setUseYInterval(true); ! XYPlot fluctPlot = new XYPlot(fluctDataset, ! null, ! new NumberAxis("bin"), ! renderer2); //plot.setBackgroundPaint(Color.lightGray); //plot.setDomainGridlinePaint(Color.white); --- 366,379 ---- renderer2.setSeriesPaint(1, Color.orange); renderer2.setUseYInterval(true); ! XYPlot fluctPlot = new XYPlot(fluctDataset, ! null, ! new NumberAxis("bin"), ! renderer2); + double initialLocation = (upper_limit+lower_limit)/2.0; + histMarker = new IntervalMarker(initialLocation,initialLocation); + histPlot.addDomainMarker(histMarker, Layer.BACKGROUND); + fluctPlot.addDomainMarker(histMarker, Layer.BACKGROUND); + //plot.setBackgroundPaint(Color.lightGray); //plot.setDomainGridlinePaint(Color.white); |