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

📄 classifiertree.java

📁 weka 源代码很好的 对于学习 数据挖掘算法很有帮助
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   * @exception Exception if something goes wrong   */  public StringBuffer [] toSource(String className) throws Exception {        StringBuffer [] result = new StringBuffer [2];    if (m_isLeaf) {      result[0] = new StringBuffer("    p = " 	+ m_localModel.distribution().maxClass(0) + ";\n");      result[1] = new StringBuffer("");    } else {      StringBuffer text = new StringBuffer();      String nextIndent = "      ";      StringBuffer atEnd = new StringBuffer();      long printID = ClassifierTree.nextID();      text.append("  static double N") 	.append(Integer.toHexString(m_localModel.hashCode()) + printID)	.append("(Object []i) {\n")	.append("    double p = Double.NaN;\n");      text.append("    if (")	.append(m_localModel.sourceExpression(-1, m_train))	.append(") {\n");      text.append("      p = ")	.append(m_localModel.distribution().maxClass(0))	.append(";\n");      text.append("    } ");      for (int i = 0; i < m_sons.length; i++) {	text.append("else if (" + m_localModel.sourceExpression(i, m_train) 		    + ") {\n");	if (m_sons[i].m_isLeaf) {	  text.append("      p = " 		      + m_localModel.distribution().maxClass(i) + ";\n");	} else {	  StringBuffer [] sub = m_sons[i].toSource(className);	  text.append(sub[0]);	  atEnd.append(sub[1]);	}	text.append("    } ");	if (i == m_sons.length - 1) {	  text.append('\n');	}      }      text.append("    return p;\n  }\n");      result[0] = new StringBuffer("    p = " + className + ".N");      result[0].append(Integer.toHexString(m_localModel.hashCode()) +  printID)	.append("(i);\n");      result[1] = text.append(atEnd);    }    return result;  }  /**   * Returns number of leaves in tree structure.   */  public int numLeaves() {        int num = 0;    int i;        if (m_isLeaf)      return 1;    else      for (i=0;i<m_sons.length;i++)	num = num+m_sons[i].numLeaves();            return num;  }  /**   * Returns number of nodes in tree structure.   */  public int numNodes() {        int no = 1;    int i;        if (!m_isLeaf)      for (i=0;i<m_sons.length;i++)	no = no+m_sons[i].numNodes();        return no;  }  /**   * Prints tree structure.   */  public String toString() {    try {      StringBuffer text = new StringBuffer();            if (m_isLeaf) {	text.append(": ");	text.append(m_localModel.dumpLabel(0,m_train));      }else	dumpTree(0,text);      text.append("\n\nNumber of Leaves  : \t"+numLeaves()+"\n");      text.append("\nSize of the tree : \t"+numNodes()+"\n");       return text.toString();    } catch (Exception e) {      return "Can't print classification tree.";    }  }  /**   * Returns a newly created tree.   *   * @param data the training data   * @exception Exception if something goes wrong   */  protected ClassifierTree getNewTree(Instances data) throws Exception{	     ClassifierTree newTree = new ClassifierTree(m_toSelectModel);    newTree.buildTree(data, false);        return newTree;  }  /**   * Returns a newly created tree.   *   * @param data the training data   * @param test the pruning data.   * @exception Exception if something goes wrong   */  protected ClassifierTree getNewTree(Instances train, Instances test)        throws Exception{	     ClassifierTree newTree = new ClassifierTree(m_toSelectModel);    newTree.buildTree(train, test, false);        return newTree;  }  /**   * Help method for printing tree structure.   *   * @exception Exception if something goes wrong   */  private void dumpTree(int depth,StringBuffer text)        throws Exception {        int i,j;        for (i=0;i<m_sons.length;i++) {      text.append("\n");;      for (j=0;j<depth;j++)	text.append("|   ");      text.append(m_localModel.leftSide(m_train));      text.append(m_localModel.rightSide(i, m_train));      if (m_sons[i].m_isLeaf) {	text.append(": ");	text.append(m_localModel.dumpLabel(i,m_train));      }else	m_sons[i].dumpTree(depth+1,text);    }  }  /**   * Help method for printing tree structure as a graph.   *   * @exception Exception if something goes wrong   */  private void graphTree(StringBuffer text) throws Exception {        for (int i = 0; i < m_sons.length; i++) {      text.append("N" + m_id  		  + "->" + 		  "N" + m_sons[i].m_id +		  " [label=\"" + m_localModel.rightSide(i,m_train).trim() + 		  "\"]\n");      if (m_sons[i].m_isLeaf) {	text.append("N" + m_sons[i].m_id +		    " [label=\""+m_localModel.dumpLabel(i,m_train)+"\" "+ 		    "shape=box style=filled ");	if (m_train != null) {	  text.append("data =\n" + m_sons[i].m_train + "\n");	  text.append(",\n");	}	text.append("]\n");      } else {	text.append("N" + m_sons[i].m_id +		    " [label=\""+m_sons[i].m_localModel.leftSide(m_train) + 		    "\" ");	if (m_train != null) {	  text.append("data =\n" + m_sons[i].m_train + "\n");	  text.append(",\n");	}	text.append("]\n");	m_sons[i].graphTree(text);      }    }  }  /**   * Prints the tree in prefix form   */  private void prefixTree(StringBuffer text) throws Exception {    text.append("[");    text.append(m_localModel.leftSide(m_train)+":");    for (int i = 0; i < m_sons.length; i++) {      if (i > 0) {	text.append(",\n");      }      text.append(m_localModel.rightSide(i, m_train));    }    for (int i = 0; i < m_sons.length; i++) {      if (m_sons[i].m_isLeaf) {	text.append("[");	text.append(m_localModel.dumpLabel(i,m_train));	text.append("]");      } else {	m_sons[i].prefixTree(text);      }    }    text.append("]");  }  /**   * Help method for computing class probabilities of    * a given instance.   *   * @exception Exception if something goes wrong   */  private double getProbsLaplace(int classIndex, Instance instance, double weight)     throws Exception {        double [] weights;    double prob = 0;    int treeIndex;    int i,j;        if (m_isLeaf) {      return weight * localModel().classProbLaplace(classIndex, instance, -1);    } else {      treeIndex = localModel().whichSubset(instance);      if (treeIndex == -1) {	weights = localModel().weights(instance);	for (i = 0; i < m_sons.length; i++) {	  if (!son(i).m_isEmpty) {	    if (!son(i).m_isLeaf) {	      prob += son(i).getProbsLaplace(classIndex, instance, 					     weights[i] * weight);	    } else {	      prob += weight * weights[i] * 		localModel().classProbLaplace(classIndex, instance, i);	    }	  }	}	return prob;      } else {	if (son(treeIndex).m_isLeaf) {	  return weight * localModel().classProbLaplace(classIndex, instance, 							treeIndex);	} else {	  return son(treeIndex).getProbsLaplace(classIndex, instance, weight);	}      }    }  }  /**   * Help method for computing class probabilities of    * a given instance.   *   * @exception Exception if something goes wrong   */  private double getProbs(int classIndex, Instance instance, double weight)     throws Exception {        double [] weights;    double prob = 0;    int treeIndex;    int i,j;        if (m_isLeaf) {      return weight * localModel().classProb(classIndex, instance, -1);    } else {      treeIndex = localModel().whichSubset(instance);      if (treeIndex == -1) {	weights = localModel().weights(instance);	for (i = 0; i < m_sons.length; i++) {	  if (!son(i).m_isEmpty) {	    prob += son(i).getProbs(classIndex, instance, 				    weights[i] * weight);	  }	}	return prob;      } else {	if (son(treeIndex).m_isEmpty) {	  return weight * localModel().classProb(classIndex, instance, 						 treeIndex);	} else {	  return son(treeIndex).getProbs(classIndex, instance, weight);	}      }    }  }  /**   * Method just exists to make program easier to read.   */  private ClassifierSplitModel localModel() {        return (ClassifierSplitModel)m_localModel;  }    /**   * Method just exists to make program easier to read.   */  private ClassifierTree son(int index) {        return (ClassifierTree)m_sons[index];  }}

⌨️ 快捷键说明

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