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

📄 hillclimber.java

📁 数据挖掘聚类算法:bayes源代码,使用JAVA语言实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	 * up to the maximum nr of parents).	 * @throws Exception if something goes wrong	 */	Operation findBestArcToAdd(BayesNet bayesNet, Instances instances, Operation oBestOperation) throws Exception {		int nNrOfAtts = instances.numAttributes();		// find best arc to add		for (int iAttributeHead = 0; iAttributeHead < nNrOfAtts; iAttributeHead++) {			if (bayesNet.getParentSet(iAttributeHead).getNrOfParents() < m_nMaxNrOfParents) {				for (int iAttributeTail = 0; iAttributeTail < nNrOfAtts; iAttributeTail++) {					if (addArcMakesSense(bayesNet, instances, iAttributeHead, iAttributeTail)) {						Operation oOperation = new Operation(iAttributeTail, iAttributeHead, Operation.OPERATION_ADD);						double fScore = calcScoreWithExtraParent(oOperation.m_nHead, oOperation.m_nTail);						if (fScore > oBestOperation.m_fScore) {							if (isNotTabu(oOperation)) {								oBestOperation = oOperation;								oBestOperation.m_fScore = fScore;							}						}					}				}			}		}		return oBestOperation;	} // findBestArcToAdd	/** 	 * find best (or least bad) arc deletion operation	 * 	 * @param bayesNet Bayes network to delete arc from	 * @param instances data set	 * @param oBestOperation	 * @return Operation containing best arc to delete, or null if no deletion can be made 	 * (happens when there is no arc in the network yet).	 * @throws Exception of something goes wrong	 */	Operation findBestArcToDelete(BayesNet bayesNet, Instances instances, Operation oBestOperation) throws Exception {		int nNrOfAtts = instances.numAttributes();		// find best arc to delete		for (int iNode = 0; iNode < nNrOfAtts; iNode++) {			ParentSet parentSet = bayesNet.getParentSet(iNode);			for (int iParent = 0; iParent < parentSet.getNrOfParents(); iParent++) {				Operation oOperation = new Operation(parentSet.getParent(iParent), iNode, Operation.OPERATION_DEL);				double fScore = calcScoreWithMissingParent(oOperation.m_nHead, oOperation.m_nTail);				if (fScore > oBestOperation.m_fScore) {					if (isNotTabu(oOperation)) {						oBestOperation = oOperation;						oBestOperation.m_fScore = fScore;					}				}			}		}		return oBestOperation;	} // findBestArcToDelete	/** 	 * find best (or least bad) arc reversal operation	 * 	 * @param bayesNet Bayes network to reverse arc in	 * @param instances data set	 * @param oBestOperation	 * @return Operation containing best arc to reverse, or null if no reversal is allowed	 * (happens if there is no arc in the network yet, or when any such reversal introduces	 * a cycle).	 * @throws Exception if something goes wrong	 */	Operation findBestArcToReverse(BayesNet bayesNet, Instances instances, Operation oBestOperation) throws Exception {		int nNrOfAtts = instances.numAttributes();		// find best arc to reverse		for (int iNode = 0; iNode < nNrOfAtts; iNode++) {			ParentSet parentSet = bayesNet.getParentSet(iNode);			for (int iParent = 0; iParent < parentSet.getNrOfParents(); iParent++) {				int iTail = parentSet.getParent(iParent);				// is reversal allowed?				if (reverseArcMakesSense(bayesNet, instances, iNode, iTail) && 				    bayesNet.getParentSet(iTail).getNrOfParents() < m_nMaxNrOfParents) {					// go check if reversal results in the best step forward					Operation oOperation = new Operation(parentSet.getParent(iParent), iNode, Operation.OPERATION_REVERSE);					double fScore = calcScoreWithReversedParent(oOperation.m_nHead, oOperation.m_nTail);					if (fScore > oBestOperation.m_fScore) {						if (isNotTabu(oOperation)) {							oBestOperation = oOperation;							oBestOperation.m_fScore = fScore;						}					}				}			}		}		return oBestOperation;	} // findBestArcToReverse		/**	 * Sets the max number of parents	 *	 * @param nMaxNrOfParents the max number of parents	 */	public void setMaxNrOfParents(int nMaxNrOfParents) {	  m_nMaxNrOfParents = nMaxNrOfParents;	} 	/**	 * Gets the max number of parents.	 *	 * @return the max number of parents	 */	public int getMaxNrOfParents() {	  return m_nMaxNrOfParents;	} 	/**	 * Returns an enumeration describing the available options.	 *	 * @return an enumeration of all the available options.	 */	public Enumeration listOptions() {		Vector newVector = new Vector(2);		newVector.addElement(new Option("\tMaximum number of parents", "P", 1, "-P <nr of parents>"));		newVector.addElement(new Option("\tUse arc reversal operation.\n\t(default false)", "R", 0, "-R"));		newVector.addElement(new Option("\tInitial structure is empty (instead of Naive Bayes)", "N", 0, "-N"));		Enumeration enu = super.listOptions();		while (enu.hasMoreElements()) {			newVector.addElement(enu.nextElement());		}		return newVector.elements();	} // listOptions	/**	 * Parses a given list of options. <p/>	 *	 <!-- options-start -->	 * Valid options are: <p/>	 * 	 * <pre> -P &lt;nr of parents&gt;	 *  Maximum number of parents</pre>	 * 	 * <pre> -R	 *  Use arc reversal operation.	 *  (default false)</pre>	 * 	 * <pre> -N	 *  Initial structure is empty (instead of Naive Bayes)</pre>	 * 	 * <pre> -mbc	 *  Applies a Markov Blanket correction to the network structure, 	 *  after a network structure is learned. This ensures that all 	 *  nodes in the network are part of the Markov blanket of the 	 *  classifier node.</pre>	 * 	 * <pre> -S [LOO-CV|k-Fold-CV|Cumulative-CV]	 *  Score type (LOO-CV,k-Fold-CV,Cumulative-CV)</pre>	 * 	 * <pre> -Q	 *  Use probabilistic or 0/1 scoring.	 *  (default probabilistic scoring)</pre>	 * 	 <!-- options-end -->	 *	 * @param options the list of options as an array of strings	 * @throws Exception if an option is not supported	 */	public void setOptions(String[] options) throws Exception {		setUseArcReversal(Utils.getFlag('R', options));		setInitAsNaiveBayes (!(Utils.getFlag('N', options)));				String sMaxNrOfParents = Utils.getOption('P', options);		if (sMaxNrOfParents.length() != 0) {		  setMaxNrOfParents(Integer.parseInt(sMaxNrOfParents));		} else {		  setMaxNrOfParents(100000);		}				super.setOptions(options);	} // setOptions	/**	 * Gets the current settings of the search algorithm.	 *	 * @return an array of strings suitable for passing to setOptions	 */	public String[] getOptions() {		String[] superOptions = super.getOptions();		String[] options = new String[7 + superOptions.length];		int current = 0;		if (getUseArcReversal()) {		  options[current++] = "-R";		}				if (!getInitAsNaiveBayes()) {		  options[current++] = "-N";		} 		options[current++] = "-P";		options[current++] = "" + m_nMaxNrOfParents;		// insert options from parent class		for (int iOption = 0; iOption < superOptions.length; iOption++) {			options[current++] = superOptions[iOption];		}		// Fill up rest with empty strings, not nulls!		while (current < options.length) {			options[current++] = "";		}		return options;	} // getOptions	/**	 * Sets whether to init as naive bayes	 *	 * @param bInitAsNaiveBayes whether to init as naive bayes	 */	public void setInitAsNaiveBayes(boolean bInitAsNaiveBayes) {	  m_bInitAsNaiveBayes = bInitAsNaiveBayes;	} 	/**	 * Gets whether to init as naive bayes	 *	 * @return whether to init as naive bayes	 */	public boolean getInitAsNaiveBayes() {	  return m_bInitAsNaiveBayes;	} 	/** get use the arc reversal operation	 * @return whether the arc reversal operation should be used	 */	public boolean getUseArcReversal() {		return m_bUseArcReversal;	} // getUseArcReversal	/** set use the arc reversal operation	 * @param bUseArcReversal whether the arc reversal operation should be used	 */	public void setUseArcReversal(boolean bUseArcReversal) {		m_bUseArcReversal = bUseArcReversal;	} // setUseArcReversal	/**	 * This will return a string describing the search algorithm.	 * @return The string.	 */	public String globalInfo() {	  return "This Bayes Network learning algorithm uses a hill climbing algorithm " +	  "adding, deleting and reversing arcs. The search is not restricted by an order " +	  "on the variables (unlike K2). The difference with B and B2 is that this hill " +	            "climber also considers arrows part of the naive Bayes structure for deletion.";	} // globalInfo	/**	 * @return a string to describe the Use Arc Reversal option.	 */	public String useArcReversalTipText() {	  return "When set to true, the arc reversal operation is used in the search.";	} // useArcReversalTipText	/**	 * Returns the revision string.	 * 	 * @return		the revision	 */	public String getRevision() {	  return RevisionUtils.extract("$Revision: 1.9 $");	}} // HillClimber

⌨️ 快捷键说明

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