weka.classifiers.bayes.net.search.ci.CISearchAlgorithm Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of weka-dev Show documentation
Show all versions of weka-dev Show documentation
The Waikato Environment for Knowledge Analysis (WEKA), a machine
learning workbench. This version represents the developer version, the
"bleeding edge" of development, you could say. New functionality gets added
to this 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