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

📄 lbr.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* *    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 2 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 *    aint with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* *    LBR.java *    The naive Bayesian classifier provides a simple and effective approach to  *    classifier learning, but its attribute independence assumption is often  *    violated in the real world. Lazy Bayesian Rules selectively relaxes the  *    independence assumption, achieving lower error rates over a range of  *    learning tasks.  LBR defers processing to classification time, making it  *    a highly efficient and accurate classification algorithm when small *    numbers of objects are to be classified. * *    For more information, see <!-- technical-plaintext-start --> * Zijian Zheng, G. Webb (2000). Lazy Learning of Bayesian Rules. Machine Learning. 4(1):53-84. <!-- technical-plaintext-end --> * *    http://www.cm.deakin.edu.au/webb * *    Copyright (C) 2001 Deakin University *    School of Computing and Mathematics *    Deakin University *    Geelong, Vic, 3217, Australia * *    Email: zhw@deakin.edu.au * */package weka.classifiers.lazy;import weka.classifiers.Classifier;import weka.core.Attribute;import weka.core.Capabilities;import weka.core.Instance;import weka.core.Instances;import weka.core.Statistics;import weka.core.TechnicalInformation;import weka.core.TechnicalInformationHandler;import weka.core.Utils;import weka.core.Capabilities.Capability;import weka.core.TechnicalInformation.Field;import weka.core.TechnicalInformation.Type;import java.io.Serializable;import java.util.ArrayList;/** <!-- globalinfo-start --> * Lazy Bayesian Rules Classifier. The naive Bayesian classifier provides a simple and effective approach to classifier learning, but its attribute independence assumption is often violated in the real world. Lazy Bayesian Rules selectively relaxes the independence assumption, achieving lower error rates over a range of learning tasks. LBR defers processing to classification time, making it a highly efficient and accurate classification algorithm when small numbers of objects are to be classified.<br/> * <br/> * For more information, see:<br/> * <br/> * Zijian Zheng, G. Webb (2000). Lazy Learning of Bayesian Rules. Machine Learning. 4(1):53-84. * <p/> <!-- globalinfo-end --> * <!-- technical-bibtex-start --> * BibTeX: * <pre> * &#64;article{Zheng2000, *    author = {Zijian Zheng and G. Webb}, *    journal = {Machine Learning}, *    number = {1}, *    pages = {53-84}, *    title = {Lazy Learning of Bayesian Rules}, *    volume = {4}, *    year = {2000} * } * </pre> * <p/> <!-- technical-bibtex-end --> * <!-- options-start --> * Valid options are: <p/> *  * <pre> -D *  If set, classifier is run in debug mode and *  may output additional info to the console</pre> *  <!-- options-end --> * * @author Zhihai Wang (zhw@deakin.edu.au) : July 2001 implemented the algorithm * @author Jason Wells (wells@deakin.edu.au) : November 2001 added instance referencing via indexes * @version $Revision: 1.10 $ */public class LBR   extends Classifier  implements TechnicalInformationHandler {  /** for serialization */  static final long serialVersionUID = 5648559277738985156L;    /**   * Class for handling instances and the associated attributes. <p>   * Enables a set of indexes to a given dataset to be created and used   * with an algorithm.  This reduces the memory overheads and time required    * when manipulating and referencing Instances and their Attributes.     */  public class Indexes implements Serializable {        /** the array instance indexes **/    public boolean [] m_InstIndexes;        /** the array attribute indexes **/    public boolean [] m_AttIndexes;        /** the number of instances indexed **/    private int m_NumInstances;        /** the number of attributes indexed **/    private int m_NumAtts;        /** the array of instance indexes that are set to a either true or false **/    public int [] m_SequentialInstIndexes;        /** an array of attribute indexes that are set to either true or false **/    public int [] m_SequentialAttIndexes;        /** flag to check if sequential array must be rebuilt due to changes to the instance index*/    private boolean m_SequentialInstanceIndex_valid = false;       /** flag to check if sequential array must be rebuilt due to changes to the attribute index */    private boolean m_SequentialAttIndex_valid = false;        /** the number of instances "in use"  or set to a the original value (true or false) **/    public int m_NumInstsSet;        /** the number of attributes "in use"  or set to a the original value (true or false) **/    public int m_NumAttsSet;        /** the number of sequential instances "in use"  or set to a the original value (true or false) **/    public int m_NumSeqInstsSet;        /** the number of sequential attributes "in use"  or set to a the original value (true or false) **/    public int m_NumSeqAttsSet;        /** the Class Index for the data set **/    public int m_ClassIndex;        /**     * constructor     * @param numInstances the number of instances in dataset     * @param numAtts the number of attributes in dataset     * @param value either true or false     * @param classIndex  Set to -1 if you want class attribute switched on or the value of the instances      * class index will be switched of and the class attibute will not be considered.     */    public Indexes(int numInstances, int numAtts, boolean value, int classIndex) {      /* to create an empty DATASET with all attributes indexed use FALSE       * to create a index of all instances and attributes use TRUE       */      // initialise counts      m_NumInstsSet =  m_NumInstances = numInstances;      m_NumAttsSet = m_NumAtts = numAtts;            m_InstIndexes = new boolean [(int)numInstances];            /* set all indexes to value */      int i = 0;      while(i < numInstances) {	m_InstIndexes[i] = value;	i++;      }            m_AttIndexes = new boolean [(int)numAtts];            /* set all indexes to true */      i = 0;      while(i < numAtts) {	m_AttIndexes[i] = true;	i++;      }      // if the value is false the dataset has no instances therefore no instances are set      if(value == false)        m_NumInstsSet = 0;      // no sequential array has been created      m_SequentialInstanceIndex_valid = false;      m_SequentialAttIndex_valid = false;            // switch class attr to false as the class is not used in the dataset.  Set to -1 if you want the class attr included      if(classIndex != -1)        setAttIndex(classIndex, false);      m_ClassIndex = classIndex;    }        /**     * constructor     * @param FromIndexes the object you want to copy     */    public Indexes(Indexes FromIndexes) {      // set counts to the FromIndexes counts      m_NumInstances = FromIndexes.getNumInstances();      m_NumInstsSet = FromIndexes.m_NumInstsSet;      m_NumAtts = FromIndexes.m_NumAtts;      m_NumAttsSet = FromIndexes.m_NumAttsSet;      m_InstIndexes = new boolean [m_NumInstances];            System.arraycopy(FromIndexes.m_InstIndexes, 0, m_InstIndexes, 0, m_NumInstances);            m_AttIndexes = new boolean [(int)m_NumAtts];            System.arraycopy(FromIndexes.m_AttIndexes, 0, m_AttIndexes, 0, m_NumAtts);      m_ClassIndex = FromIndexes.m_ClassIndex;      m_SequentialInstanceIndex_valid = false;      m_SequentialAttIndex_valid = false;    }        /**     *      * Changes the boolean value at the specified index in the InstIndexes array     *     * @param index the index of the instance     * @param value the value to set at the specified index     *     */    public void setInstanceIndex(int index, boolean value) {      if(index < 0 || index >= m_NumInstances)	throw new IllegalArgumentException("Invalid Instance Index value");      // checks that the index isn't alreading set to value      if(m_InstIndexes[(int)index] != value) {		// set the value	m_InstIndexes[(int)index] = value;		// a change has been made, so sequential array is invalid	m_SequentialInstanceIndex_valid = false;		// change the number of values "in use" to appropriate value	if(value == false)	  m_NumInstsSet--;	else	  m_NumInstsSet++;      }   }        /**     *      * Changes the boolean value at the specified index in the InstIndexes array     *     * @param Attributes array of attributes     * @param value the value to set at the specified index     *     */    public void setAtts(int [] Attributes, boolean value) {      for(int i = 0; i < m_NumAtts; i++) {        m_AttIndexes[i] = !value;      }      for (int i = 0; i < Attributes.length; i++)  {        m_AttIndexes[Attributes[i]] = value;      }      m_NumAttsSet = Attributes.length;      m_SequentialAttIndex_valid = false;    }        /**     *      * Changes the boolean value at the specified index in the InstIndexes array     *     * @param Instances array of instances     * @param value the value to set at the specified index     *     */    public void setInsts(int [] Instances, boolean value) {      resetInstanceIndex(!value);      for (int i = 0; i < Instances.length; i++)  {        m_InstIndexes[Instances[i]] = value;      }      m_NumInstsSet = Instances.length;      m_SequentialInstanceIndex_valid = false;    }            /**     *      * Changes the boolean value at the specified index in the AttIndexes array     *     * @param index the index of the instance     * @param value the value to set at the specified index     *     */    public void setAttIndex(int index, boolean value) {      if(index < 0 || index >= m_NumAtts)	throw new IllegalArgumentException("Invalid Attribute Index value");      // checks that the index isn't alreading set to value      if(m_AttIndexes[(int)index] != value) {		// set the value	m_AttIndexes[(int)index] = value;		// a change has been made, so sparse array is invalid	m_SequentialAttIndex_valid = false;  		 // change the number of values "in use" to appropriate value	if(value == false)	  m_NumAttsSet--;	else	  m_NumAttsSet++;      }    }        /**     *      * Returns the boolean value at the specified index in the Instance Index array     *     * @param index the index of the instance     * @return the boolean value at the specified index     */    public boolean getInstanceIndex(int index) {            if(index < 0 || index >= m_NumInstances)	throw new IllegalArgumentException("Invalid index value");            return m_InstIndexes[(int)index];     }        /**     *      * Returns the boolean value at the specified index in the Sequential Instance Indexes array     *     * @param index the index of the instance     * @return the requested value     */    public int getSequentialInstanceIndex(int index) {            if(index < 0 || index >= m_NumInstances)	throw new IllegalArgumentException("Invalid index value");            return m_SequentialInstIndexes[(int)index];     }        /**     *      * Resets the boolean value in the Instance Indexes array to a specified value     *     * @param value the value to set all indexes     *     */    public void resetInstanceIndex(boolean value) {      m_NumInstsSet = m_NumInstances;      for(int i = 0; i < m_NumInstances; i++) {	m_InstIndexes[i] = value;      }      if(value == false)	m_NumInstsSet =  0;      m_SequentialInstanceIndex_valid = false;    }       /**    *     * Resets the boolean values in Attribute and Instance array to reflect an empty dataset withthe same attributes set as in the incoming Indexes Object    *    * @param FromIndexes the Indexes to be copied    *     */    public void resetDatasetBasedOn(Indexes FromIndexes) {      resetInstanceIndex(false);      resetAttIndexTo(FromIndexes);    }       /**     *      * Resets the boolean value in AttIndexes array     *     * @param value the value to set the attributes to     *      */    public void resetAttIndex(boolean value) {      m_NumAttsSet =  m_NumAtts;      for(int i = 0; i < m_NumAtts; i++) {	m_AttIndexes[i] = value;      }      if(m_ClassIndex != -1)	setAttIndex(m_ClassIndex, false);      if(value == false)	m_NumAttsSet =  0;     m_SequentialAttIndex_valid = false;    }        /**     *      * Resets the boolean value in AttIndexes array based on another set of Indexes     *     * @param FromIndexes the Indexes to be copied     *     */    public void resetAttIndexTo(Indexes FromIndexes) {      System.arraycopy(FromIndexes.m_AttIndexes, 0, m_AttIndexes, 0, m_NumAtts);      m_NumAttsSet =  FromIndexes.getNumAttributesSet();      m_ClassIndex = FromIndexes.m_ClassIndex;      m_SequentialAttIndex_valid = false;

⌨️ 快捷键说明

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