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

📄 attributeselection.java

📁 这是关于数据挖掘的一些算法
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
      // whatever      if ((!(m_ASEvaluator instanceof UnsupervisedSubsetEvaluator) 	   && !(m_ASEvaluator instanceof UnsupervisedAttributeEvaluator)) || 	  m_trainInstances.classIndex() >= 0) 	// one more for the class	{	  m_selectedAttributeSet = new int[attributeSet.length + 1];	  m_selectedAttributeSet[attributeSet.length] = 	    m_trainInstances.classIndex();	}      else {	m_selectedAttributeSet = new int[attributeSet.length];      }            for (int i = 0; i < attributeSet.length; i++) {	m_selectedAttributeSet[i] = attributeSet[i];      }      m_selectionResults.append("Selected attributes: ");      for (int i = 0; i < attributeSet.length; i++) {	if (i == (attributeSet.length - 1)) {	  m_selectionResults.append((attributeSet[i] + 1) 				    + " : " 				    + attributeSet.length 				    + "\n");	}	else {	  m_selectionResults.append((attributeSet[i] + 1) + ",");	}      }      for (int i=0;i<attributeSet.length;i++) {	m_selectionResults.append("                     "				  +m_trainInstances				  .attribute(attributeSet[i]).name()				  +"\n");      }    }    // Cross validation should be called from here    if (m_doXval == true) {      m_selectionResults.append(CrossValidateAttributes());     }    // set up the attribute filter with the selected attributes    if (m_selectedAttributeSet != null && !m_doXval) {      m_attributeFilter = new Remove();      m_attributeFilter.setAttributeIndicesArray(m_selectedAttributeSet);      m_attributeFilter.setInvertSelection(true);      m_attributeFilter.setInputFormat(m_trainInstances);      }    // Save space    m_trainInstances = new Instances(m_trainInstances, 0);  }  /**   * Perform attribute selection with a particular evaluator and   * a set of options specifying search method and options for the   * search method and evaluator.   *   * @param ASEvaluator an evaluator object   * @param options an array of options, not only for the evaluator   * but also the search method (if any) and an input data file   * @param train the input instances   * @return the results of attribute selection as a String   * @exception Exception if incorrect options are supplied   */  public static String SelectAttributes (ASEvaluation ASEvaluator, 					 String[] options, 					 Instances train)    throws Exception {    int seed = 1, folds = 10;    String foldsString, seedString, searchName;    String classString;    String searchClassName;    String[] searchOptions = null; //new String [1];    ASSearch searchMethod = null;    boolean doCrossVal = false;    int classIndex = -1;    boolean helpRequested = false;    AttributeSelection trainSelector = new AttributeSelection();    try {      if (Utils.getFlag('h', options)) {	helpRequested = true;      }      // does data already have a class attribute set?      if (train.classIndex() != -1)	classIndex = train.classIndex() + 1;      // get basic options (options the same for all attribute selectors      classString = Utils.getOption('c', options);      if (classString.length() != 0) {	if (classString.equals("first")) {	  classIndex = 1;	} else if (classString.equals("last")) {	  classIndex = train.numAttributes();	} else {	  classIndex = Integer.parseInt(classString);	}      }      if ((classIndex != -1) && 	  ((classIndex == 0) || (classIndex > train.numAttributes()))) {	throw  new Exception("Class index out of range.");      }      if (classIndex != -1) {	train.setClassIndex(classIndex - 1);      }      else {	//	classIndex = train.numAttributes();	//	train.setClassIndex(classIndex - 1);      }            foldsString = Utils.getOption('x', options);      if (foldsString.length() != 0) {	folds = Integer.parseInt(foldsString);	doCrossVal = true;      }            trainSelector.setFolds(folds);      trainSelector.setXval(doCrossVal);      seedString = Utils.getOption('n', options);      if (seedString.length() != 0) {	seed = Integer.parseInt(seedString);      }      trainSelector.setSeed(seed);      searchName = Utils.getOption('s', options);      if ((searchName.length() == 0) && 	  (!(ASEvaluator instanceof AttributeEvaluator))) {	throw  new Exception("No search method given.");      }      if (searchName.length() != 0) {	searchName = searchName.trim();	// split off any search options	int breakLoc = searchName.indexOf(' ');	searchClassName = searchName;	String searchOptionsString = "";	if (breakLoc != -1) {	  searchClassName = searchName.substring(0, breakLoc);	  searchOptionsString = searchName.substring(breakLoc).trim();	  searchOptions = Utils.splitOptions(searchOptionsString);	}      }      else {	try {	  searchClassName = new String("weka.attributeSelection.Ranker");	  searchMethod = (ASSearch)Class.	    forName(searchClassName).newInstance();	}	catch (Exception e) {	  throw  new Exception("Can't create Ranker object");	}      }      // if evaluator is a subset evaluator      // create search method and set its options (if any)      if (searchMethod == null) {	searchMethod = ASSearch.forName(searchClassName, searchOptions);      }      // set the search method      trainSelector.setSearch(searchMethod);    }    catch (Exception e) {      throw  new Exception('\n' + e.getMessage() 			   + makeOptionString(ASEvaluator, searchMethod));    }    try {      // Set options for ASEvaluator      if (ASEvaluator instanceof OptionHandler) {	((OptionHandler)ASEvaluator).setOptions(options);      }      /* // Set options for Search method	 if (searchMethod instanceof OptionHandler)	 {	 if (searchOptions != null)	 {	 ((OptionHandler)searchMethod).setOptions(searchOptions);	 }	 }	 Utils.checkForRemainingOptions(searchOptions); */    }    catch (Exception e) {      throw  new Exception("\n" + e.getMessage() 			   + makeOptionString(ASEvaluator, searchMethod));    }    try {      Utils.checkForRemainingOptions(options);    }    catch (Exception e) {      throw  new Exception('\n' + e.getMessage() 			   + makeOptionString(ASEvaluator, searchMethod));    }    if (helpRequested) {      System.out.println(makeOptionString(ASEvaluator, searchMethod));      System.exit(0);    }    // set the attribute evaluator    trainSelector.setEvaluator(ASEvaluator);    // do the attribute selection    trainSelector.SelectAttributes(train);    // return the results string    return trainSelector.toResultsString();  }  /**   * Assembles a text description of the attribute selection results.   *   * @return a string describing the results of attribute selection.   */  private String printSelectionResults () {    StringBuffer text = new StringBuffer();    text.append("\n\n=== Attribute Selection on all input data ===\n\n" 		+ "Search Method:\n");    text.append(m_searchMethod.toString());    text.append("\nAttribute ");    if (m_ASEvaluator instanceof SubsetEvaluator) {      text.append("Subset Evaluator (");    }    else {      text.append("Evaluator (");    }    if (!(m_ASEvaluator instanceof UnsupervisedSubsetEvaluator) 	&& !(m_ASEvaluator instanceof UnsupervisedAttributeEvaluator)) {      text.append("supervised, ");      text.append("Class (");      if (m_trainInstances.attribute(m_trainInstances.classIndex())	  .isNumeric()) {	text.append("numeric): ");      }      else {	text.append("nominal): ");      }      text.append((m_trainInstances.classIndex() + 1) 		  + " " 		  + m_trainInstances.attribute(m_trainInstances					       .classIndex()).name() 		  + "):\n");    }    else {      text.append("unsupervised):\n");    }    text.append(m_ASEvaluator.toString() + "\n");    return  text.toString();  }  /**   * Make up the help string giving all the command line options   *   * @param ASEvaluator the attribute evaluator to include options for   * @param searchMethod the search method to include options for   * @return a string detailing the valid command line options   * @throws Exception if something goes wrong   */  private static String makeOptionString (ASEvaluation ASEvaluator, 					  ASSearch searchMethod)    throws Exception {        StringBuffer optionsText = new StringBuffer("");    // General options    optionsText.append("\n\nGeneral options:\n\n");    optionsText.append("-h\n\tdisplay this help\n");    optionsText.append("-i <name of input file>\n");    optionsText.append("\tSets training file.\n");    optionsText.append("-c <class index>\n");    optionsText.append("\tSets the class index for supervised attribute\n");    optionsText.append("\tselection. Default=last column.\n");    optionsText.append("-s <class name>\n");    optionsText.append("\tSets search method for subset evaluators.\n");    optionsText.append("-x <number of folds>\n");    optionsText.append("\tPerform a cross validation.\n");    optionsText.append("-n <random number seed>\n");    optionsText.append("\tUse in conjunction with -x.\n");    // Get attribute evaluator-specific options    if (ASEvaluator instanceof OptionHandler) {      optionsText.append("\nOptions specific to " 			 + ASEvaluator.getClass().getName() 			 + ":\n\n");      Enumeration enu = ((OptionHandler)ASEvaluator).listOptions();      while (enu.hasMoreElements()) {	Option option = (Option)enu.nextElement();	optionsText.append(option.synopsis() + '\n');	optionsText.append(option.description() + "\n");      }    }    if (searchMethod != null) {      if (searchMethod instanceof OptionHandler) {	optionsText.append("\nOptions specific to " 			   + searchMethod.getClass().getName() 			   + ":\n\n");	Enumeration enu = ((OptionHandler)searchMethod).listOptions();	while (enu.hasMoreElements()) {	  Option option = (Option)enu.nextElement();	  optionsText.append(option.synopsis() + '\n');	  optionsText.append(option.description() + "\n");	}      }    }    else {      if (ASEvaluator instanceof SubsetEvaluator) {	System.out.println("No search method given.");      }    }    return  optionsText.toString();  }  /**   * Main method for testing this class.   *   * @param args the options   */  public static void main (String[] args) {    try {      if (args.length == 0) {	throw  new Exception("The first argument must be the name of an " 			     + "attribute/subset evaluator");      }      String EvaluatorName = args[0];      args[0] = "";      ASEvaluation newEval = ASEvaluation.forName(EvaluatorName, null);      System.out.println(SelectAttributes(newEval, args));    }    catch (Exception e) {      System.out.println(e.getMessage());    }  }}

⌨️ 快捷键说明

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