All Downloads are FREE. Search and download functionalities are using the official Maven repository.

weka.classifiers.bayes.net.search.ci.CISearchAlgorithm Maven / Gradle / Ivy

Go to download

The Waikato Environment for Knowledge Analysis (WEKA), a machine learning workbench. This is the stable version. Apart from bugfixes, this version does not receive any other updates.

There is a newer version: 3.8.6
Show newest version
/*
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see .
 */

/*
 * CISearchAlgorithm.java
 * Copyright (C) 2004-2012 University of Waikato, Hamilton, New Zealand
 * 
 */

package weka.classifiers.bayes.net.search.ci;

import weka.classifiers.bayes.BayesNet;
import weka.classifiers.bayes.net.ParentSet;
import weka.classifiers.bayes.net.search.local.LocalScoreSearchAlgorithm;
import weka.core.Instances;
import weka.core.RevisionUtils;

/** 
 
 * The CISearchAlgorithm class supports Bayes net structure search algorithms that are based on conditional independence test (as opposed to for example score based of cross validation based search algorithms).
 * 

* * Valid options are:

* *

 -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.
* *
 -S [BAYES|MDL|ENTROPY|AIC|CROSS_CLASSIC|CROSS_BAYES]
 *  Score type (BAYES, BDeu, MDL, ENTROPY and AIC)
* * * @author Remco Bouckaert ([email protected]) * @version $Revision: 8034 $ */ public class CISearchAlgorithm extends LocalScoreSearchAlgorithm { /** for serialization */ static final long serialVersionUID = 3165802334119704560L; BayesNet m_BayesNet; Instances m_instances; /** * Returns a string describing this object * @return a description of the classifier suitable for * displaying in the explorer/experimenter gui */ public String globalInfo() { return "The CISearchAlgorithm class supports Bayes net structure " + "search algorithms that are based on conditional independence " + "test (as opposed to for example score based of cross validation " + "based search algorithms)."; } /** IsConditionalIndependent tests whether two nodes X and Y are independent * given a set of variables Z. The test compares the score of the Bayes network * with and without arrow Y->X where all nodes in Z are parents of X. * @param iAttributeX - index of attribute representing variable X * @param iAttributeY - index of attribute representing variable Y * @param iAttributesZ - array of integers representing indices of attributes in set Z * @param nAttributesZ - cardinality of Z * @return true if X and Y conditionally independent given Z */ protected boolean isConditionalIndependent( int iAttributeX, int iAttributeY, int [] iAttributesZ, int nAttributesZ) { ParentSet oParentSetX = m_BayesNet.getParentSet(iAttributeX); // clear parent set of AttributeX while (oParentSetX.getNrOfParents() > 0) { oParentSetX.deleteLastParent(m_instances); } // insert parents in iAttributeZ for (int iAttributeZ = 0; iAttributeZ < nAttributesZ; iAttributeZ++) { oParentSetX.addParent( iAttributesZ[iAttributeZ], m_instances); } double fScoreZ = calcNodeScore(iAttributeX); double fScoreZY = calcScoreWithExtraParent(iAttributeX, iAttributeY); if (fScoreZY <= fScoreZ) { // the score does not improve by adding Y to the parent set of X // so we conclude that nodes X and Y are conditionally independent // given the set of variables Z return true; } return false; } // IsConditionalIndependent /** * Returns the revision string. * * @return the revision */ public String getRevision() { return RevisionUtils.extract("$Revision: 8034 $"); } } // class CISearchAlgorithm




© 2015 - 2024 Weber Informatics LLC | Privacy Policy