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

📄 randomsearch.java

📁 这是关于数据挖掘的一些算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String verboseTipText() {    return "Print progress information. Sends progress info to the terminal "      +"as the search progresses.";  }  /**   * set whether or not to output new best subsets as the search proceeds   * @param v true if output is to be verbose   */  public void setVerbose(boolean v) {    m_verbose = v;  }  /**   * get whether or not output is verbose   * @return true if output is set to verbose   */  public boolean getVerbose() {    return m_verbose;  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String searchPercentTipText() {    return "Percentage of the search space to explore.";  }  /**   * set the percentage of the search space to consider   * @param p percent of the search space ( 0 < p <= 100)   */  public void setSearchPercent(double p) {    p = Math.abs(p);    if (p == 0) {      p = 25;    }    if (p > 100.0) {      p = 100;    }    m_searchSize = (p/100.0);  }  /**   * get the percentage of the search space to consider   * @return the percent of the search space explored   */  public double getSearchPercent() {    return m_searchSize * 100;  }  /**   * converts the array of starting attributes to a string. This is   * used by getOptions to return the actual attributes specified   * as the starting set. This is better than using m_startRanges.getRanges()   * as the same start set can be specified in different ways from the   * command line---eg 1,2,3 == 1-3. This is to ensure that stuff that   * is stored in a database is comparable.   * @return a comma seperated list of individual attribute numbers as a String   */  private String startSetToString() {    StringBuffer FString = new StringBuffer();    boolean didPrint;        if (m_starting == null) {      return getStartSet();    }    for (int i = 0; i < m_starting.length; i++) {      didPrint = false;            if ((m_hasClass == false) || 	  (m_hasClass == true && i != m_classIndex)) {	FString.append((m_starting[i] + 1));	didPrint = true;      }            if (i == (m_starting.length - 1)) {	FString.append("");      }      else {	if (didPrint) {	  FString.append(",");	  }      }    }    return FString.toString();  }  /**   * prints a description of the search   * @return a description of the search as a string   */  public String toString() {    StringBuffer text = new StringBuffer();        text.append("\tRandom search.\n\tStart set: ");    if (m_starting == null) {      text.append("no attributes\n");    }    else {      text.append(startSetToString()+"\n");    }    text.append("\tNumber of iterations: "+m_iterations+" ("		+(m_searchSize * 100.0)+"% of the search space)\n");    text.append("\tMerit of best subset found: "		+Utils.doubleToString(Math.abs(m_bestMerit),8,3)+"\n");    return text.toString();  }  /**   * Searches the attribute subset space randomly.   *   * @param ASEval the attribute evaluator to guide the search   * @param data the training instances.   * @return an array (not necessarily ordered) of selected attribute indexes   * @throws Exception if the search can't be completed   */   public int[] search (ASEvaluation ASEval, Instances data)     throws Exception {     double best_merit;     int sizeOfBest = m_numAttribs;     BitSet temp;     m_bestGroup = new BitSet(m_numAttribs);          m_onlyConsiderBetterAndSmaller = false;     if (!(ASEval instanceof SubsetEvaluator)) {       throw  new Exception(ASEval.getClass().getName() 			    + " is not a " 			    + "Subset evaluator!");     }     m_random = new Random(m_seed);          if (ASEval instanceof UnsupervisedSubsetEvaluator) {       m_hasClass = false;     }     else {       m_hasClass = true;       m_classIndex = data.classIndex();     }          SubsetEvaluator ASEvaluator = (SubsetEvaluator)ASEval;     m_numAttribs = data.numAttributes();     m_startRange.setUpper(m_numAttribs-1);     if (!(getStartSet().equals(""))) {       m_starting = m_startRange.getSelection();     }     // If a starting subset has been supplied, then initialise the bitset     if (m_starting != null) {       for (int i = 0; i < m_starting.length; i++) {	 if ((m_starting[i]) != m_classIndex) {	   m_bestGroup.set(m_starting[i]);	 }       }       m_onlyConsiderBetterAndSmaller = true;       best_merit = ASEvaluator.evaluateSubset(m_bestGroup);       sizeOfBest = countFeatures(m_bestGroup);     } else {       // do initial random subset       m_bestGroup = generateRandomSubset();       best_merit = ASEvaluator.evaluateSubset(m_bestGroup);     }          if (m_verbose) {       System.out.println("Initial subset ("			  +Utils.doubleToString(Math.						abs(best_merit),8,5)			  +"): "+printSubset(m_bestGroup));     }     int i;     if (m_hasClass) {       i = m_numAttribs -1;     } else {       i = m_numAttribs;     }     m_iterations = (int)((m_searchSize * Math.pow(2, i)));          int tempSize;     double tempMerit;     // main loop     for (i=0;i<m_iterations;i++) {       temp = generateRandomSubset();       if (m_onlyConsiderBetterAndSmaller) {	 tempSize = countFeatures(temp);	 if (tempSize <= sizeOfBest) {	   tempMerit = ASEvaluator.evaluateSubset(temp);	   if (tempMerit >= best_merit) {	     sizeOfBest = tempSize;	     m_bestGroup = temp;	     best_merit = tempMerit;	     if (m_verbose) {	       System.out.print("New best subset ("				  +Utils.doubleToString(Math.							abs(best_merit),8,5)				  +"): "+printSubset(m_bestGroup) + " :");	       System.out.println(Utils.				  doubleToString((((double)i)/						  ((double)m_iterations)*						  100.0),5,1)				  +"% done");	     }	   }	 }       } else {	 tempMerit = ASEvaluator.evaluateSubset(temp);	 if (tempMerit > best_merit) {	   m_bestGroup = temp;	   best_merit = tempMerit;	   if (m_verbose) {	     System.out.print("New best subset ("				+Utils.doubleToString(Math.abs(best_merit),8,5)				+"): "+printSubset(m_bestGroup) + " :");	     System.out.println(Utils.				doubleToString((((double)i)/						((double)m_iterations)						*100.0),5,1)				+"% done");	   }	 }       }     }     m_bestMerit = best_merit;     return attributeList(m_bestGroup);   }  /**   * prints a subset as a series of attribute numbers   * @param temp the subset to print   * @return a subset as a String of attribute numbers   */  private String printSubset(BitSet temp) {    StringBuffer text = new StringBuffer();    for (int j=0;j<m_numAttribs;j++) {      if (temp.get(j)) {        text.append((j+1)+" ");      }    }    return text.toString();  }  /**   * converts a BitSet into a list of attribute indexes    * @param group the BitSet to convert   * @return an array of attribute indexes   **/  private int[] attributeList (BitSet group) {    int count = 0;        // count how many were selected    for (int i = 0; i < m_numAttribs; i++) {      if (group.get(i)) {	count++;      }    }        int[] list = new int[count];    count = 0;        for (int i = 0; i < m_numAttribs; i++) {      if (group.get(i)) {	list[count++] = i;      }    }        return  list;  }  /**   * generates a random subset   * @return a random subset as a BitSet   */  private BitSet generateRandomSubset() {    BitSet temp = new BitSet(m_numAttribs);    double r;    for (int i=0;i<m_numAttribs;i++) {      r = m_random.nextDouble();      if (r <= 0.5) {	if (m_hasClass && i == m_classIndex) {	} else {	  temp.set(i);	}      }    }    return temp;  }  /**   * counts the number of features in a subset   * @param featureSet the feature set for which to count the features   * @return the number of features in the subset   */  private int countFeatures(BitSet featureSet) {    int count = 0;    for (int i=0;i<m_numAttribs;i++) {      if (featureSet.get(i)) {	count++;      }    }    return count;  }  /**   * resets to defaults   */  private void resetOptions() {    m_starting = null;    m_startRange = new Range();    m_searchSize = 0.25;    m_seed = 1;    m_onlyConsiderBetterAndSmaller = false;    m_verbose = false;  }}

⌨️ 快捷键说明

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