/** * Tests the CostCurve generation from the command line. The classifier is currently hardcoded. * Pipe in an arff file. * * @param args currently ignored */ public static void main(String[] args) { try { Instances inst = new Instances(new java.io.InputStreamReader(System.in)); inst.setClassIndex(inst.numAttributes() - 1); CostCurve cc = new CostCurve(); EvaluationUtils eu = new EvaluationUtils(); Classifier classifier = new features.classifiers.functions.Logistic(); FastVector predictions = new FastVector(); for (int i = 0; i < 2; i++) { // Do two runs. eu.setSeed(i); predictions.appendElements(eu.getCVPredictions(classifier, inst, 10)); // System.out.println("\n\n\n"); } Instances result = cc.getCurve(predictions); System.out.println(result); } catch (Exception ex) { ex.printStackTrace(); } }
/** * Accept an instance for processing by StreamableFilters only * * @param e an <code>InstanceEvent</code> value */ public void acceptInstance(InstanceEvent e) { // to do! if (m_filterThread != null) { String messg = Messages.getInstance().getString("Filter_AcceptInstance_Mess_Text_First") + statusMessagePrefix() + Messages.getInstance().getString("Filter_AcceptInstance_Mess_Text_Second"); if (m_log != null) { m_log.logMessage(messg); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_First")); } else { System.err.println(messg); } return; } if (!(m_Filter instanceof StreamableFilter)) { stop(); // stop all processing if (m_log != null) { m_log.logMessage( Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_First") + statusMessagePrefix() + Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Second") + m_Filter.getClass().getName() + Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Third")); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Second")); } return; } if (e.getStatus() == InstanceEvent.FORMAT_AVAILABLE) { try { m_instanceCount = 0; // notifyInstanceListeners(e); // Instances dataset = e.getInstance().dataset(); Instances dataset = e.getStructure(); if (m_Filter instanceof SupervisedFilter) { // defualt to last column if no class is set if (dataset.classIndex() < 0) { dataset.setClassIndex(dataset.numAttributes() - 1); } } // initialize filter m_Filter.setInputFormat(dataset); // attempt to determine post-filtering // structure. If successful this can be passed on to instance // listeners as a new FORMAT_AVAILABLE event. m_structurePassedOn = false; try { if (m_Filter.isOutputFormatDefined()) { // System.err.println("Filter - passing on output format..."); // System.err.println(m_Filter.getOutputFormat()); m_ie.setStructure(m_Filter.getOutputFormat()); notifyInstanceListeners(m_ie); m_structurePassedOn = true; } } catch (Exception ex) { stop(); // stop all processing if (m_log != null) { m_log.logMessage( Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Fourth") + statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_LogMessage_Text_Fifth") + ex.getMessage()); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Third")); } else { System.err.println( Messages.getInstance().getString("Filter_AcceptInstance_Error_Text_First") + statusMessagePrefix() + Messages.getInstance().getString("Filter_AcceptInstance_Error_Text_Second")); } } } catch (Exception ex) { ex.printStackTrace(); } return; } if (e.getStatus() == InstanceEvent.BATCH_FINISHED) { // get the last instance (if available) try { if (m_log != null) { m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Fourth")); } if (m_Filter.input(e.getInstance())) { Instance filteredInstance = m_Filter.output(); if (filteredInstance != null) { if (!m_structurePassedOn) { // pass on the new structure first m_ie.setStructure(new Instances(filteredInstance.dataset(), 0)); notifyInstanceListeners(m_ie); m_structurePassedOn = true; } m_ie.setInstance(filteredInstance); // if there are instances pending for output don't want to send // a batch finisehd at this point... // System.err.println("Filter - in batch finisehd..."); if (m_Filter.batchFinished() && m_Filter.numPendingOutput() > 0) { m_ie.setStatus(InstanceEvent.INSTANCE_AVAILABLE); } else { m_ie.setStatus(e.getStatus()); } notifyInstanceListeners(m_ie); } } if (m_log != null) { m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Fourth_Alpha")); } } catch (Exception ex) { stop(); // stop all processing if (m_log != null) { m_log.logMessage( Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Sixth") + statusMessagePrefix() + ex.getMessage()); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Fifth")); } ex.printStackTrace(); } // check for any pending instances that we might need to pass on try { if (m_Filter.batchFinished() && m_Filter.numPendingOutput() > 0) { if (m_log != null) { m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Sixth")); } Instance filteredInstance = m_Filter.output(); if (filteredInstance != null) { if (!m_structurePassedOn) { // pass on the new structure first m_ie.setStructure(new Instances(filteredInstance.dataset(), 0)); notifyInstanceListeners(m_ie); m_structurePassedOn = true; } m_ie.setInstance(filteredInstance); // TODO here is the problem I think m_ie.setStatus(InstanceEvent.INSTANCE_AVAILABLE); notifyInstanceListeners(m_ie); } while (m_Filter.numPendingOutput() > 0) { filteredInstance = m_Filter.output(); m_ie.setInstance(filteredInstance); // System.err.println("Filter - sending pending..."); if (m_Filter.numPendingOutput() == 0) { m_ie.setStatus(InstanceEvent.BATCH_FINISHED); } else { m_ie.setStatus(InstanceEvent.INSTANCE_AVAILABLE); } notifyInstanceListeners(m_ie); } if (m_log != null) { m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Seventh")); } } } catch (Exception ex) { stop(); // stop all processing if (m_log != null) { m_log.logMessage( Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Seventh") + statusMessagePrefix() + ex.toString()); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Eighth")); } ex.printStackTrace(); } } else { // pass instance through the filter try { if (!m_Filter.input(e.getInstance())) { // System.err.println("Filter - inputing instance into filter..."); /* if (m_log != null) { m_log.logMessage("ERROR : filter not ready to output instance"); } */ // quietly return. Filter might be able to output some instances // once the batch is finished. return; } // collect output instance. Instance filteredInstance = m_Filter.output(); if (filteredInstance == null) { return; } m_instanceCount++; if (!m_structurePassedOn) { // pass on the new structure first m_ie.setStructure(new Instances(filteredInstance.dataset(), 0)); notifyInstanceListeners(m_ie); m_structurePassedOn = true; } m_ie.setInstance(filteredInstance); m_ie.setStatus(e.getStatus()); if (m_log != null && (m_instanceCount % 10000 == 0)) { m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Nineth") + m_instanceCount + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Tenth")); } notifyInstanceListeners(m_ie); } catch (Exception ex) { stop(); // stop all processing if (m_log != null) { m_log.logMessage( Messages.getInstance().getString("Filter_AcceptInstance_LogMessage_Text_Eighth") + statusMessagePrefix() + ex.toString()); m_log.statusMessage( statusMessagePrefix() + Messages.getInstance() .getString("Filter_AcceptInstance_StatusMessage_Text_Eleventh")); } ex.printStackTrace(); } } }