ensembleclassifiersplitevaluator.java

来自「wekaUT是 university texas austin 开发的基于wek」· Java 代码 · 共 467 行 · 第 1/2 页

JAVA
467
字号
      ? m_AdditionalMeasures.length       : 0;    int overall_length = RESULT_SIZE+addm;    overall_length += NUM_IR_STATISTICS;    Object [] result = new Object[overall_length];    EnsembleEvaluation eval = new EnsembleEvaluation(train);    long trainTimeStart = System.currentTimeMillis();        //Modification to allow for semisupervision    if(m_Classifier instanceof SemiSupClassifier) ((SemiSupClassifier) m_Classifier).setUnlabeled(unlabeled);        m_Classifier.buildClassifier(train);    long trainTimeElapsed = System.currentTimeMillis() - trainTimeStart;    long testTimeStart = System.currentTimeMillis();    eval.evaluateModel(m_Classifier, test);    long testTimeElapsed = System.currentTimeMillis() - testTimeStart;    m_result = eval.toSummaryString();    // The results stored are all per instance -- can be multiplied by the    // number of instances to get absolute numbers    int current = 0;    result[current++] = new Double(eval.numInstances());    result[current++] = new Double(eval.correct());    result[current++] = new Double(eval.incorrect());    result[current++] = new Double(eval.unclassified());    result[current++] = new Double(eval.pctCorrect());    result[current++] = new Double(eval.pctIncorrect());    result[current++] = new Double(eval.pctUnclassified());    result[current++] = new Double(eval.kappa());    //Ensemble stats - Prem Melville    result[current++] = new Double(eval.ensemblePctCorrect());    result[current++] = new Double(eval.ensemblePctIncorrect());    result[current++] = new Double(eval.ensembleDiversity());        result[current++] = new Double(eval.meanAbsoluteError());    result[current++] = new Double(eval.rootMeanSquaredError());    result[current++] = new Double(eval.relativeAbsoluteError());    result[current++] = new Double(eval.rootRelativeSquaredError());    result[current++] = new Double(eval.SFPriorEntropy());    result[current++] = new Double(eval.SFSchemeEntropy());    result[current++] = new Double(eval.SFEntropyGain());    result[current++] = new Double(eval.SFMeanPriorEntropy());    result[current++] = new Double(eval.SFMeanSchemeEntropy());    result[current++] = new Double(eval.SFMeanEntropyGain());    // K&B stats    result[current++] = new Double(eval.KBInformation());    result[current++] = new Double(eval.KBMeanInformation());    result[current++] = new Double(eval.KBRelativeInformation());    // IR stats    result[current++] = new Double(eval.truePositiveRate(m_IRclass));    result[current++] = new Double(eval.numTruePositives(m_IRclass));    result[current++] = new Double(eval.falsePositiveRate(m_IRclass));    result[current++] = new Double(eval.numFalsePositives(m_IRclass));    result[current++] = new Double(eval.trueNegativeRate(m_IRclass));    result[current++] = new Double(eval.numTrueNegatives(m_IRclass));    result[current++] = new Double(eval.falseNegativeRate(m_IRclass));    result[current++] = new Double(eval.numFalseNegatives(m_IRclass));    result[current++] = new Double(eval.precision(m_IRclass));    result[current++] = new Double(eval.recall(m_IRclass));    result[current++] = new Double(eval.fMeasure(m_IRclass));    // Timing stats    result[current++] = new Double(trainTimeElapsed / 1000.0);    result[current++] = new Double(testTimeElapsed / 1000.0);    if (m_Classifier instanceof Summarizable) {      result[current++] = ((Summarizable)m_Classifier).toSummaryString();    } else {      result[current++] = null;    }    for (int i=0;i<addm;i++) {      if (m_doesProduce[i]) {	try {	  double dv = ((AdditionalMeasureProducer)m_Classifier).	    getMeasure(m_AdditionalMeasures[i]);	  Double value = new Double(dv);	  result[current++] = value;	} catch (Exception ex) {	  System.err.println(ex);	}      } else {	result[current++] = null;      }    }    if (current != overall_length) {      throw new Error("Results didn't fit RESULT_SIZE");    }    return result;  }  /**   * Gets the results for the supplied train and test datasets.   *   * @param train the training Instances.   * @param test the testing Instances.   * @return the results stored in an array. The objects stored in   * the array may be Strings, Doubles, or null (for the missing value).   * @exception Exception if a problem occurs while getting the results   */  public Object [] getResult(Instances train, Instances test)     throws Exception {        if (train.classAttribute().type() != Attribute.NOMINAL) {      throw new Exception("Class attribute is not nominal!");    }    if (m_Classifier == null) {      throw new Exception("No classifier has been specified");    }    int addm = (m_AdditionalMeasures != null)       ? m_AdditionalMeasures.length       : 0;    int overall_length = RESULT_SIZE+addm;    overall_length += NUM_IR_STATISTICS;    Object [] result = new Object[overall_length];    EnsembleEvaluation eval = new EnsembleEvaluation(train);    long trainTimeStart = System.currentTimeMillis();    m_Classifier.buildClassifier(train);    long trainTimeElapsed = System.currentTimeMillis() - trainTimeStart;    long testTimeStart = System.currentTimeMillis();    eval.evaluateModel(m_Classifier, test);    long testTimeElapsed = System.currentTimeMillis() - testTimeStart;    m_result = eval.toSummaryString();    // The results stored are all per instance -- can be multiplied by the    // number of instances to get absolute numbers    int current = 0;    result[current++] = new Double(eval.numInstances());    result[current++] = new Double(eval.correct());    result[current++] = new Double(eval.incorrect());    result[current++] = new Double(eval.unclassified());    result[current++] = new Double(eval.pctCorrect());    result[current++] = new Double(eval.pctIncorrect());    result[current++] = new Double(eval.pctUnclassified());    result[current++] = new Double(eval.kappa());        //Ensemble stats - Prem Melville    result[current++] = new Double(eval.ensemblePctCorrect());    result[current++] = new Double(eval.ensemblePctIncorrect());    result[current++] = new Double(eval.ensembleDiversity());        result[current++] = new Double(eval.meanAbsoluteError());    result[current++] = new Double(eval.rootMeanSquaredError());    result[current++] = new Double(eval.relativeAbsoluteError());    result[current++] = new Double(eval.rootRelativeSquaredError());    result[current++] = new Double(eval.SFPriorEntropy());    result[current++] = new Double(eval.SFSchemeEntropy());    result[current++] = new Double(eval.SFEntropyGain());    result[current++] = new Double(eval.SFMeanPriorEntropy());    result[current++] = new Double(eval.SFMeanSchemeEntropy());    result[current++] = new Double(eval.SFMeanEntropyGain());    // K&B stats    result[current++] = new Double(eval.KBInformation());    result[current++] = new Double(eval.KBMeanInformation());    result[current++] = new Double(eval.KBRelativeInformation());    // IR stats    result[current++] = new Double(eval.truePositiveRate(m_IRclass));    result[current++] = new Double(eval.numTruePositives(m_IRclass));    result[current++] = new Double(eval.falsePositiveRate(m_IRclass));    result[current++] = new Double(eval.numFalsePositives(m_IRclass));    result[current++] = new Double(eval.trueNegativeRate(m_IRclass));    result[current++] = new Double(eval.numTrueNegatives(m_IRclass));    result[current++] = new Double(eval.falseNegativeRate(m_IRclass));    result[current++] = new Double(eval.numFalseNegatives(m_IRclass));    result[current++] = new Double(eval.precision(m_IRclass));    result[current++] = new Double(eval.recall(m_IRclass));    result[current++] = new Double(eval.fMeasure(m_IRclass));    // Timing stats    result[current++] = new Double(trainTimeElapsed / 1000.0);    result[current++] = new Double(testTimeElapsed / 1000.0);    if (m_Classifier instanceof Summarizable) {      result[current++] = ((Summarizable)m_Classifier).toSummaryString();    } else {      result[current++] = null;    }    for (int i=0;i<addm;i++) {      if (m_doesProduce[i]) {	try {	  double dv = ((AdditionalMeasureProducer)m_Classifier).	    getMeasure(m_AdditionalMeasures[i]);	  Double value = new Double(dv);	  result[current++] = value;	} catch (Exception ex) {	  System.err.println(ex);	}      } else {	result[current++] = null;      }    }    if (current != overall_length) {      throw new Error("Results didn't fit RESULT_SIZE");    }    return result;  }  /**   * Returns a text description of the split evaluator.   *   * @return a text description of the split evaluator.   */  public String toString() {    String result = "EnsembleClassifierSplitEvaluator: ";    if (m_Classifier == null) {      return result + "<null> classifier";    }    return result + m_Classifier.getClass().getName() + " "       + m_ClassifierOptions + "(version " + m_ClassifierVersion + ")";  }} // EnsembleClassifierSplitEvaluator

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?