⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evaluation.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
   *   * @param classIndex the index of the class to consider as "positive"   * @return the true positive rate   */  public double numTruePositives(int classIndex) {    double correct = 0;    for (int j = 0; j < m_NumClasses; j++) {      if (j == classIndex) {	correct += m_ConfusionMatrix[classIndex][j];      }    }    return correct;  }  /**   * Calculate the true positive rate with respect to a particular class.    * This is defined as<p>   * <pre>   * correctly classified positives   * ------------------------------   *       total positives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the true positive rate   */  public double truePositiveRate(int classIndex) {    double correct = 0, total = 0;    for (int j = 0; j < m_NumClasses; j++) {      if (j == classIndex) {	correct += m_ConfusionMatrix[classIndex][j];      }      total += m_ConfusionMatrix[classIndex][j];    }    if (total == 0) {      return 0;    }    return correct / total;  }  /**   * Calculate the number of true negatives with respect to a particular class.    * This is defined as<p>   * <pre>   * correctly classified negatives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the true positive rate   */  public double numTrueNegatives(int classIndex) {    double correct = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i != classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j != classIndex) {	    correct += m_ConfusionMatrix[i][j];	  }	}      }    }    return correct;  }  /**   * Calculate the true negative rate with respect to a particular class.    * This is defined as<p>   * <pre>   * correctly classified negatives   * ------------------------------   *       total negatives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the true positive rate   */  public double trueNegativeRate(int classIndex) {    double correct = 0, total = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i != classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j != classIndex) {	    correct += m_ConfusionMatrix[i][j];	  }	  total += m_ConfusionMatrix[i][j];	}      }    }    if (total == 0) {      return 0;    }    return correct / total;  }  /**   * Calculate number of false positives with respect to a particular class.    * This is defined as<p>   * <pre>   * incorrectly classified negatives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the false positive rate   */  public double numFalsePositives(int classIndex) {    double incorrect = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i != classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j == classIndex) {	    incorrect += m_ConfusionMatrix[i][j];	  }	}      }    }    return incorrect;  }  /**   * Calculate the false positive rate with respect to a particular class.    * This is defined as<p>   * <pre>   * incorrectly classified negatives   * --------------------------------   *        total negatives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the false positive rate   */  public double falsePositiveRate(int classIndex) {    double incorrect = 0, total = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i != classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j == classIndex) {	    incorrect += m_ConfusionMatrix[i][j];	  }	  total += m_ConfusionMatrix[i][j];	}      }    }    if (total == 0) {      return 0;    }    return incorrect / total;  }  /**   * Calculate number of false negatives with respect to a particular class.    * This is defined as<p>   * <pre>   * incorrectly classified positives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the false positive rate   */  public double numFalseNegatives(int classIndex) {    double incorrect = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i == classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j != classIndex) {	    incorrect += m_ConfusionMatrix[i][j];	  }	}      }    }    return incorrect;  }  /**   * Calculate the false negative rate with respect to a particular class.    * This is defined as<p>   * <pre>   * incorrectly classified positives   * --------------------------------   *        total positives   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the false positive rate   */  public double falseNegativeRate(int classIndex) {    double incorrect = 0, total = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i == classIndex) {	for (int j = 0; j < m_NumClasses; j++) {	  if (j != classIndex) {	    incorrect += m_ConfusionMatrix[i][j];	  }	  total += m_ConfusionMatrix[i][j];	}      }    }    if (total == 0) {      return 0;    }    return incorrect / total;  }  /**   * Calculate the recall with respect to a particular class.    * This is defined as<p>   * <pre>   * correctly classified positives   * ------------------------------   *       total positives   * </pre><p>   * (Which is also the same as the truePositiveRate.)   *   * @param classIndex the index of the class to consider as "positive"   * @return the recall   */  public double recall(int classIndex) {    return truePositiveRate(classIndex);  }  /**   * Calculate the precision with respect to a particular class.    * This is defined as<p>   * <pre>   * correctly classified positives   * ------------------------------   *  total predicted as positive   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the precision   */  public double precision(int classIndex) {    double correct = 0, total = 0;    for (int i = 0; i < m_NumClasses; i++) {      if (i == classIndex) {	correct += m_ConfusionMatrix[i][classIndex];      }      total += m_ConfusionMatrix[i][classIndex];    }    if (total == 0) {      return 0;    }    return correct / total;  }  /**   * Calculate the F-Measure with respect to a particular class.    * This is defined as<p>   * <pre>   * 2 * recall * precision   * ----------------------   *   recall + precision   * </pre>   *   * @param classIndex the index of the class to consider as "positive"   * @return the F-Measure   */  public double fMeasure(int classIndex) {    double precision = precision(classIndex);    double recall = recall(classIndex);    if ((precision + recall) == 0) {      return 0;    }    return 2 * precision * recall / (precision + recall);  }  /**   * Sets the class prior probabilities   *   * @param train the training instances used to determine   * the prior probabilities   * @exception Exception if the class attribute of the instances is not   * set   */  public void setPriors(Instances train) throws Exception {    if (!m_ClassIsNominal) {      m_NumTrainClassVals = 0;      m_TrainClassVals = null;      m_TrainClassWeights = null;      m_PriorErrorEstimator = null;      m_ErrorEstimator = null;      for (int i = 0; i < train.numInstances(); i++) {	Instance currentInst = train.instance(i);	if (!currentInst.classIsMissing()) {	  addNumericTrainClass(currentInst.classValue(), 				  currentInst.weight());	}      }    } else {      for (int i = 0; i < m_NumClasses; i++) {	m_ClassPriors[i] = 1;      }      m_ClassPriorsSum = m_NumClasses;      for (int i = 0; i < train.numInstances(); i++) {	if (!train.instance(i).classIsMissing()) {	  m_ClassPriors[(int)train.instance(i).classValue()] += 	    train.instance(i).weight();	  m_ClassPriorsSum += train.instance(i).weight();	}      }    }  }  /**   * Updates the class prior probabilities (when incrementally    * training)   *   * @param instance the new training instance seen   * @exception Exception if the class of the instance is not   * set   */  public void updatePriors(Instance instance) throws Exception {    if (!instance.classIsMissing()) {      if (!m_ClassIsNominal) {	if (!instance.classIsMissing()) {	  addNumericTrainClass(instance.classValue(), 			       instance.weight());	}      } else {	m_ClassPriors[(int)instance.classValue()] += 	  instance.weight();	m_ClassPriorsSum += instance.weight();      }    }      }  /**   * Tests whether the current evaluation object is equal to another   * evaluation object   *   * @param obj the object to compare against   * @return true if the two objects are equal   */  public boolean equals(Object obj) {    if ((obj == null) || !(obj.getClass().equals(this.getClass()))) {      return false;    }    Evaluation cmp = (Evaluation) obj;    if (m_ClassIsNominal != cmp.m_ClassIsNominal) return false;    if (m_NumClasses != cmp.m_NumClasses) return false;    if (m_Incorrect != cmp.m_Incorrect) return false;    if (m_Correct != cmp.m_Correct) return false;    if (m_Unclassified != cmp.m_Unclassified) return false;    if (m_MissingClass != cmp.m_MissingClass) return false;    if (m_WithClass != cmp.m_WithClass) return false;    if (m_SumErr != cmp.m_SumErr) return false;    if (m_SumAbsErr != cmp.m_SumAbsErr) return false;    if (m_SumSqrErr != cmp.m_SumSqrErr) return false;    if (m_SumClass != cmp.m_SumClass) return false;    if (m_SumSqrClass != cmp.m_SumSqrClass) return false;    if (m_SumPredicted != cmp.m_SumPredicted) return false;    if (m_SumSqrPredicted != cmp.m_SumSqrPredicted) return false;    if (m_SumClassPredicted != cmp.m_SumClassPredicted) return false;    if (m_ClassIsNominal) {      for (int i = 0; i < m_NumClasses; i++) {	for (int j = 0; j < m_NumClasses; j++) {	  if (m_ConfusionMatrix[i][j] != cmp.m_ConfusionMatrix[i][j]) {	    return false;	  }	}      }    }        return true;  }  /**   * Prints the predictions for the given dataset into a String variable.   */  private static String printClassifications(Classifier classifier, 					     Instances train,					     String testFileName,					     int classIndex,					     Range attributesToOutput) throws Exception {    StringBuffer text = new StringBuffer();    if (testFileName.length() != 0) {      BufferedReader testReader = null;      try {	testReader = new BufferedReader(new FileReader(testFileName));      } catch (Exception e) {	throw new Exception("Can't open file " + e.getMessage() + '.');      }      Instances test = new Instances(testReader, 1);      if (classIndex != -1) {	test.setClassIndex(classIndex - 1);      } else {	test.setClassIndex(test.numAttributes() - 1);      }      int i = 0;      while (test.readInstance(testReader)) {	Instance instance = test.instance(0);    	Instance withMissing = (Instance)instance.copy();	withMissing.setDataset(test);	double predValue = 	  ((Classifier)classifier).classifyInstance(withMissing);	if (test.classAttribute().isNumeric()) {	  if (Instance.isMissingValue(predValue)) {	    text.append(i + " missing ");	  } else {	    text.append(i + " " + predValue + " ");	  }	  if (instance.classIsMissing()) {	    text.append("missing");	  } else {	    text.append(instance.classValue());	  }	  text.append(" " + attributeValuesString(withMissing, attributesToOutput) + "\n");	} else {	  if (Instance.isMissingValue(predValue)) {	    text.append

⌨️ 快捷键说明

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