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

📄 flr.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   *  the metric space for the iris dataset:   *  [ 4.3  7.9 ]  [ 2.0  4.4 ]  [ 1.0  6.9 ]  [ 0.1  2.5 ]  in Class:  -1   *  This lattice just contains the min and max value in each    *  dimension.   *  In other kind of problems this may not be just a min-max    *  operation, but it could contain limits defined by the problem    *  itself.   *  Thus, this option should be set by the user.   *  If ommited, the metric space used contains the mins and maxs    *  of the training split.</pre>   *    * <pre> -Y   *  Show Rules</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 {    // Option -Y    m_showRules = Utils.getFlag('Y', options);    // Option -R    String rhoaString = Utils.getOption('R', options);    if (rhoaString.length() != 0) {      m_Rhoa = Double.parseDouble(rhoaString);      if (m_Rhoa < 0 || m_Rhoa > 1) {        throw new Exception(            "Vigilance parameter (rhoa) should be a real number in range [0,1]");      }    }    else      m_Rhoa = 0.5;      // Option -B    String boundsString = Utils.getOption('B', options);    if (boundsString.length() != 0) {      m_BoundsFile = new File(boundsString);    } //fi    Utils.checkForRemainingOptions(options);  } //setOptions  /**   * Gets the current settings of the Classifier.   *   * @return an array of strings suitable for passing to setOptions   */  public String[] getOptions() {    String[] options = new String[5];    int current = 0;    options[current++] = "-R";    options[current++] = "" + getRhoa();    if (m_showRules) {      options[current++] = "-Y";    }    if (m_BoundsFile.toString() != "") {      options[current++] = "-B";      options[current++] = "" + getBoundsFile();    }    while (current < options.length) {      options[current++] = "";    }    return options;  } // getOptions  /**   * Get rhoa   * @return the value of this parameter   */  public double getRhoa() {    return m_Rhoa;  }  /**   * Get boundaries File   * @return the value of this parameter   */  public String getBoundsFile() {    return m_BoundsFile.toString();  }  /**   * Get ShowRules parameter   * @return the value of this parameter   */  public boolean getShowRules() {    return m_showRules;  }  /**   * Set rhoa   * @param newRhoa sets the rhoa value   * @throws Exception if rhoa is not in range [0,1]   */  public void setRhoa(double newRhoa) throws Exception {    if (newRhoa < 0 || newRhoa > 1) {      throw new Exception(          "Vigilance parameter (rhoa) should be a real number in range [0,1]!!!");    }    m_Rhoa = newRhoa;  }  /**   * Set Boundaries File   * @param newBoundsFile a new file containing the boundaries   */  public void setBoundsFile(String newBoundsFile) {    m_BoundsFile = new File(newBoundsFile);  }  /**   * Set ShowRules flag   * @param flag the new value of this parameter   */  public void setShowRules(boolean flag) {    m_showRules = flag;  }  /**   * Sets the metric space from the training set using the min-max stats, in case -B option is not used.   * @param data is the training set   */  public void setBounds(Instances data) {    // Initialize minmax stats    bounds = new FuzzyLattice(data.numAttributes() - 1);    int k = 0;    for (int i = 0; i < data.numAttributes(); i++) {      if (i != data.classIndex()) {        AttributeStats stats = data.attributeStats(i);        bounds.setMin(k, stats.numericStats.min);        bounds.setMax(k, stats.numericStats.max);        k = k + 1;      } //if    } //for  } //setBounds  /**   * Checks the metric space   */  public void checkBounds() {    for (int i = 0; i < bounds.length(); i++) {      if (bounds.getMin(i) == bounds.getMax(i))        bounds.setMax(i, bounds.getMax(i) + EPSILON);    }  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String rhoaTipText() {    return " The vigilance parameter value" + " (default = 0.75)";  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String boundsFileTipText() {    return " Point the filename containing the metric space";  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String showRulesTipText() {    return " If true, displays the ruleset.";  }  /**   * Returns the value of the named measure   * @param additionalMeasureName the name of the measure to query for its value   * @return the value of the named measure   * @throws IllegalArgumentException if the named measure is not supported   */  public double getMeasure(String additionalMeasureName) {    if (additionalMeasureName.compareToIgnoreCase("measureNumRules") == 0) {      return measureNumRules();    }    else {      throw new IllegalArgumentException(additionalMeasureName +                                         " not supported (FLR)");    }  }  /**   * Returns an enumeration of the additional measure names   * @return an enumeration of the measure names   */  public Enumeration enumerateMeasures() {    Vector newVector = new Vector(1);    newVector.addElement("measureNumRules");    return newVector.elements();  }  /**   * Additional measure Number of Rules   * @return the number of rules induced   */  public double measureNumRules() {    if (learnedCode == null)      return 0.0;    else      return (double) learnedCode.size();  }  /**   * Returns a description of the classifier suitable for   * displaying in the explorer/experimenter gui   * @return the description   */  public String globalInfo() {    return         "Fuzzy Lattice Reasoning Classifier (FLR) v5.0\n\n"      + "The Fuzzy Lattice Reasoning Classifier uses the notion of Fuzzy "      + "Lattices for creating a Reasoning Environment.\n"      + "The current version can be used for classification using numeric predictors.\n\n"      + "For more information see:\n\n"      + getTechnicalInformation().toString();  }  /**   * Returns an instance of a TechnicalInformation object, containing    * detailed information about the technical background of this class,   * e.g., paper reference or book this class is based on.   *    * @return the technical information about this class   */  public TechnicalInformation getTechnicalInformation() {    TechnicalInformation 	result;    TechnicalInformation 	additional;       result = new TechnicalInformation(Type.INPROCEEDINGS);    result.setValue(Field.AUTHOR, "I. N. Athanasiadis and V. G. Kaburlasos and P. A. Mitkas and V. Petridis");    result.setValue(Field.TITLE, "Applying Machine Learning Techniques on Air Quality Data for Real-Time Decision Support");    result.setValue(Field.BOOKTITLE, "1st Intl. NAISO Symposium on Information Technologies in Environmental Engineering (ITEE-2003)");    result.setValue(Field.YEAR, "2003");    result.setValue(Field.ADDRESS, "Gdansk, Poland");    result.setValue(Field.PUBLISHER, "ICSC-NAISO Academic Press");    result.setValue(Field.NOTE, "Abstract in ICSC-NAISO Academic Press, Canada (ISBN:3906454339), pg.51");        additional = result.add(Type.UNPUBLISHED);    additional.setValue(Field.AUTHOR, "V. G. Kaburlasos and I. N. Athanasiadis and P. A. Mitkas and V. Petridis");    additional.setValue(Field.TITLE, "Fuzzy Lattice Reasoning (FLR) Classifier and its Application on Improved Estimation of Ambient Ozone Concentration");    additional.setValue(Field.YEAR, "2003");        return result;  }  /**   * Main method for testing this class.   *   * @param args should contain command line arguments for evaluation   * (see Evaluation).   */  public static void main(String[] args) {    runClassifier(new FLR(), args);  }  /**   * <p>Fuzzy Lattice implementation in WEKA </p>   *   * @author Ioannis N. Athanasiadis   * email: ionathan@iti.gr   * alias: ionathan@ieee.org   * @version 5.0   */  private class FuzzyLattice      implements Serializable {    /** for serialization */    static final long serialVersionUID = -3568003680327062404L;        private double min[];    private double max[];    private int categ;    private String className;    //Constructors    /**     * Constructs a Fuzzy Lattice from a instance     * @param dR the instance     * @param bounds the boundaries file     */    public FuzzyLattice(Instance dR, FuzzyLattice bounds) {      min = new double[dR.numAttributes() - 1];      max = new double[dR.numAttributes() - 1];      int k = 0;      for (int i = 0; i < dR.numAttributes(); i++) {        if (i != dR.classIndex()) {          if (!dR.isMissing(i)) {            min[k] = (dR.value(i) > bounds.getMin(k)) ? dR.value(i) :                bounds.getMin(k);            max[k] = (dR.value(i) < bounds.getMax(k)) ? dR.value(i) :                bounds.getMax(k);            k = k + 1;          } //if(!dR.isMissing(i))          else {            min[k] = bounds.getMax(k);            max[k] = bounds.getMin(k);            k = k + 1;          } //else        } //if(i!=dR.classIndex())      } //for (int i=0; i<dR.numAttributes();i++)      categ = (int) dR.value(dR.classIndex());      className = dR.stringValue(dR.classIndex());    } //FuzzyLattice    /**     * Constructs an empty Fuzzy Lattice of a specific dimension pointing     * in Class "Metric Space" (-1)     * @param length the dimention of the Lattice     */    public FuzzyLattice(int length) {      min = new double[length];      max = new double[length];      for (int i = 0; i < length; i++) {        min[i] = 0;        max[i] = 0;      }      categ = -1;      className = "Metric Space";    }    /**     * Converts a String to a Fuzzy Lattice pointing in Class "Metric Space" (-1)     * Note that the input String should be compatible with the toString() method.     * @param rule the input String.     */    public FuzzyLattice(String rule) {      int size = 0;      for (int i = 0; i < rule.length(); i++) {        String s = rule.substring(i, i + 1);        if (s.equalsIgnoreCase("[")) {          size++;        }      }      min = new double[size];      max = new double[size];      int i = 0;      int k = 0;      String temp = "";      int s = 0;      do {        String character = rule.substring(s, s + 1);        temp = temp + character;        if (character.equalsIgnoreCase(" ")) {          if (!temp.equalsIgnoreCase(" ")) {            k = k + 1;            if (k % 4 == 2) {              min[i] = Double.parseDouble(temp);            } //if            else if (k % 4 == 3) {              max[i] = Double.parseDouble(temp);              i = i + 1;            } //else          } // if (!temp.equalsIgnoreCase(" ") ){          temp = "";        } //if (character.equalsIgnoreCase(seperator)){        s = s + 1;      }      while (i < size);      categ = -1;      className = "Metric Space";    }    // Functions    /**     * Calculates the valuation function of the FuzzyLattice     * @param bounds corresponding boundaries     * @return the value of the valuation function     */    public double valuation(FuzzyLattice bounds) {      double resp = 0.0;      for (int i = 0; i < min.length; i++) {        resp += 1 -            (min[i] - bounds.getMin(i)) / (bounds.getMax(i) - bounds.getMin(i));        resp += (max[i] - bounds.getMin(i)) /            (bounds.getMax(i) - bounds.getMin(i));      }      return resp;    }    /**     * Calcualtes the length of the FuzzyLattice     * @return the length     */    public int length() {      return min.length;    }    /**     * Implements the Join Function     * @param lattice the second fuzzy lattice     * @return the joint lattice     */    public FuzzyLattice join(FuzzyLattice lattice) { // Lattice Join      FuzzyLattice b = new FuzzyLattice(lattice.length());      int i;      for (i = 0; i < lattice.min.length; i++) {        b.min[i] = (lattice.min[i] < min[i]) ? lattice.min[i] :            min[i];        b.max[i] = (lattice.max[i] > max[i]) ? lattice.max[i] :            max[i];      }      b.categ = categ;      b.className = className;      return b;    }    // Get-Set Functions    public int getCateg() {      return categ;    }    public void setCateg(int i) {      categ = i;    }    public String getClassName() {      return className;    }    public void setClassName(String s) {      className = s;    }    public double getMin(int i) {      return min[i];    }    public double getMax(int i) {      return max[i];    }    public void setMin(int i, double val) {      min[i] = val;    }    public void setMax(int i, double val) {      max[i] = val;    }    /**     * Returns a description of the Fuzzy Lattice     * @return the Fuzzy Lattice and the corresponding Class     */    public String toString() {      String rule = "";      for (int i = 0; i < min.length; i++) {        rule = rule + "[ " + min[i] + "  " + max[i] + " ]  ";      }      rule = rule + "in Class:  " + className + " \n";      return rule;    }  }}

⌨️ 快捷键说明

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