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

📄 semisupincompletelabelcurvecvresultproducer.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	    else 	      System.out.println("Run:" + run + " Fold:" + fold + " Size:" + m_CurrentSize  + " NumMissingLablels:" + m_NumMissingLabels);	    Instances test = new Instances(testSet);	    Instances labeledTrainSubset = new Instances(train, 0, m_CurrentSize);	    Instances unlabeledTrainSubsetWithLabels = new Instances(train, m_CurrentSize, maxTrainSize()-m_CurrentSize);	    System.out.println("labeledTrain: " + m_CurrentSize + ", unlabeledTrain: " + unlabeledTrainSubsetWithLabels.numInstances() + ", maxTrain: " + maxTrainSize());	    if (m_IsTransductive) {	      for (int i=0; i<test.numInstances(); i++) {		unlabeledTrainSubsetWithLabels.add(test.instance(i));	      }	    }	    	    // Select random set of missing class labels to remove from training data 	    Random random = new Random(fold);	    int [] marks = new int[numClasses];	    for (int i=0; i<numClasses; i++) 	      marks[i] = 0;	    for (int rand=0; rand<m_NumMissingLabels; rand++) {	      int classToRemove = random.nextInt(numClasses);	      while (marks[classToRemove] == 1) {		classToRemove = random.nextInt(numClasses);	      }	      marks[classToRemove] = 1;	    }	    	    // Remove labeled data with missing class labels from training set	    /*	    for (int i=0; i<numClasses; i++) {	      if (marks[i] == 1)		System.out.println("Removing class: " + i + " from train");	      else		System.out.println("Keeping class: " + i + " in train");	    }	    */	    for (int num=0; num<labeledTrainSubset.numInstances(); num++) {	      Instance inst = labeledTrainSubset.instance(num);	      if (marks[(int) inst.classValue()] == 1) {		//		System.out.println("Removing train instance with class " + inst.classValue());		inst.setClassMissing();	      }	    }	    labeledTrainSubset.deleteWithMissingClass();	    System.out.println("NumInstances in train: " + labeledTrainSubset.numInstances());	    // Keep data only having missing class labels in test set	    	    if (m_NumMissingLabels != 0) { // if no classes removed, do normal clustering	      for (int num=0; num<test.numInstances(); num++) {		Instance inst = test.instance(num);		if (marks[(int) inst.classValue()] == 0) {		  //		  System.out.println("Removing test instance with class " + inst.classValue());		  inst.setClassMissing();		}	      }	      test.deleteWithMissingClass();	    }	    System.out.println("NumInstances in test: " + test.numInstances());	    int classIndex = unlabeledTrainSubsetWithLabels.numAttributes(); // assuming that the last attribute is always the class	    // Need to remove the class labels from the unlabeledTrainSubsetWithLabels data before training learner	    Instances unlabeledTrainSubset = new Instances(unlabeledTrainSubsetWithLabels);	    unlabeledTrainSubset.deleteClassAttribute();			    Object [] seResults;	    if (m_SplitEvaluator instanceof SemiSupClustererSplitEvaluator) {	      seResults = ((SemiSupClustererSplitEvaluator) m_SplitEvaluator).getResult(labeledTrainSubset, unlabeledTrainSubset, test, numClasses); 	    }	    else {	      throw new Exception("SplitEvaluator should be SemiSupClustererSplitEvaluator - SemiSupClassifierSplitEvaluator not yet implemented");	    }	    	    Object [] results = new Object [seResults.length + 1];	    results[0] = getTimestamp();	    System.arraycopy(seResults, 0, results, 1,			     seResults.length);	    if (m_debugOutput) {	      String resultName = (""+run+"."+(fold+1)+"."+ m_CurrentSize + "." 				   + Utils.backQuoteChars(runInstances.relationName())				   +"."				   +m_SplitEvaluator.toString()).replace(' ','_');	      resultName = Utils.removeSubstring(resultName, 						 "weka.clusterers.");	      resultName = Utils.removeSubstring(resultName, 						 "weka.filters.");	      resultName = Utils.removeSubstring(resultName, 						 "weka.attributeSelection.");	      m_ZipDest.zipit(m_SplitEvaluator.getRawResultOutput(), resultName);	    }	    m_ResultListener.acceptResult(this, key, results);	  } catch (Exception ex) {	    // Save the train and test datasets for debugging purposes?	    throw ex;	  }	}	if (m_PlotPoints != null) {	  pointNum ++;	  m_NumMissingLabels = plotPoint(pointNum);	}	else {	  m_NumMissingLabels += m_StepSize;	}      }    }  }  /** Determines if the points specified are fractions of the total number of examples */  protected boolean setIsFraction(){    if (m_PlotPoints != null){      if(!isInteger(m_PlotPoints[0]))//if the first point is not an integer	m_IsFraction = true;      else	m_IsFraction = false;    }    return m_IsFraction;  }    /** Return the number of training examples for the ith point on the   * curve for plotPoints as specified.   */  protected int plotPoint(int i) {    // If i beyond number of given plot points return a value greater than maximum training size    int length = m_PlotPoints.length;      double point = 0;    if (i >= length) {      point = m_Instances.numClasses() + 1;    }    else {      point = m_PlotPoints[i];    }    return (int)point;  }    /** Return true if the given double represents an integer value */  protected static boolean isInteger(double val) {    return Utils.eq(Math.floor(val), Math.ceil(val));  }    /**   * Gets the names of each of the columns produced for a single run.   * This method should really be static.   *   * @return an array containing the name of each column   */  public String [] getKeyNames() {    String [] keyNames = m_SplitEvaluator.getKeyNames();    // Add in the names of our extra key fields    int numExtraKeys;    if(m_IsFraction)      numExtraKeys = 5;    else       numExtraKeys = 4;    String [] newKeyNames = new String [keyNames.length + numExtraKeys];    newKeyNames[0] = DATASET_FIELD_NAME;    newKeyNames[1] = RUN_FIELD_NAME;    newKeyNames[2] = FOLD_FIELD_NAME;    newKeyNames[3] = STEP_FIELD_NAME;    if(m_IsFraction) newKeyNames[4] = FRACTION_FIELD_NAME;    System.arraycopy(keyNames, 0, newKeyNames, numExtraKeys, keyNames.length);    return newKeyNames;  }  /**   * Gets the data types of each of the columns produced for a single run.   * This method should really be static.   *   * @return an array containing objects of the type of each column. The    * objects should be Strings, or Doubles.   */  public Object [] getKeyTypes() {    Object [] keyTypes = m_SplitEvaluator.getKeyTypes();    int numExtraKeys;    if(m_IsFraction)      numExtraKeys = 5;    else       numExtraKeys = 4;    // Add in the types of our extra fields    Object [] newKeyTypes = new String [keyTypes.length + numExtraKeys];    newKeyTypes[0] = new String();    newKeyTypes[1] = new String();    newKeyTypes[2] = new String();    newKeyTypes[3] = new String();    if(m_IsFraction) newKeyTypes[4] = new String();    System.arraycopy(keyTypes, 0, newKeyTypes, numExtraKeys, keyTypes.length);    return newKeyTypes;  }  /**   * Gets the names of each of the columns produced for a single run.   * This method should really be static.   *   * @return an array containing the name of each column   */  public String [] getResultNames() {    String [] resultNames = m_SplitEvaluator.getResultNames();    // Add in the names of our extra Result fields    String [] newResultNames = new String [resultNames.length + 1];    newResultNames[0] = TIMESTAMP_FIELD_NAME;    System.arraycopy(resultNames, 0, newResultNames, 1, resultNames.length);    return newResultNames;  }  /**   * Gets the data types of each of the columns produced for a single run.   * This method should really be static.   *   * @return an array containing objects of the type of each column. The    * objects should be Strings, or Doubles.   */  public Object [] getResultTypes() {    Object [] resultTypes = m_SplitEvaluator.getResultTypes();    // Add in the types of our extra Result fields    Object [] newResultTypes = new Object [resultTypes.length + 1];    newResultTypes[0] = new Double(0);    System.arraycopy(resultTypes, 0, newResultTypes, 1, resultTypes.length);    return newResultTypes;  }  /**   * Gets a description of the internal settings of the result   * producer, sufficient for distinguishing a ResultProducer   * instance from another with different settings (ignoring   * those settings set through this interface). For example,   * a cross-validation ResultProducer may have a setting for the   * number of folds. For a given state, the results produced should   * be compatible. Typically if a ResultProducer is an OptionHandler,   * this string will represent the command line arguments required   * to set the ResultProducer to that state.   *   * @return the description of the ResultProducer state, or null   * if no state is defined   */  public String getCompatibilityState() {    String result = "-X " + m_NumFolds + " -S " + getStepSize() + 	" -L " + getLowerSize() + " -U " + getUpperSize() + " ";    if (m_SplitEvaluator == null) {      result += "<null SplitEvaluator>";    } else {      result += "-W " + m_SplitEvaluator.getClass().getName();    }    return result + " --";  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String outputFileTipText() {    return "Set the destination for saving raw output. If the rawOutput "      +"option is selected, then output from the splitEvaluator for "      +"individual folds is saved. If the destination is a directory, "      +"then each output is saved to an individual gzip file; if the "      +"destination is a file, then each output is saved as an entry "      +"in a zip file.";  }  /**   * Get the value of OutputFile.   *   * @return Value of OutputFile.   */  public File getOutputFile() {        return m_OutputFile;  }    /**   * Set the value of OutputFile.   *   * @param newOutputFile Value to assign to OutputFile.   */  public void setOutputFile(File newOutputFile) {        m_OutputFile = newOutputFile;  }    /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String numFoldsTipText() {    return "Number of folds to use in cross validation.";  }  /**   * Get the value of NumFolds.   *   * @return Value of NumFolds.   */  public int getNumFolds() {        return m_NumFolds;  }    /**   * Set the value of NumFolds.   *   * @param newNumFolds Value to assign to NumFolds.   */  public void setNumFolds(int newNumFolds) {        m_NumFolds = newNumFolds;  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String isTransductiveTipText() {    return "Whether evaluation is transductive or not.";  }  /**   * Get the value of IsTransductive.   *   * @return Value of IsTransductive.   */  public boolean getIsTransductive() {        return m_IsTransductive;  }    /**   * Set the value of IsTransductive.   *   * @param flag Value to assign to IsTransductive.   */  public void setIsTransductive(boolean flag) {        m_IsTransductive = flag;  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String lowerSizeTipText() {    return "Set the minimum number of categories to drop in a training set. Setting zero "      + "here will actually drop <stepSize> number of categories at the first "      + "step ";  }  /**   * Get the value of LowerSize.   *   * @return Value of LowerSize.   */  public int getLowerSize() {        return m_LowerSize;  }    /**   * Set the value of LowerSize.   *   * @param newLowerSize Value to assign to   * LowerSize.   */  public void setLowerSize(int newLowerSize) {        m_LowerSize = newLowerSize;  }  /**   * Returns the tip text for this property   * @return tip text for this property suitable for   * displaying in the explorer/experimenter gui   */  public String upperSizeTipText() {    return "Set the maximum number of labeled categories to drop in a training set. Setting -1 "      + "sets no upper limit (other than the total number of categories "      + "in the full training set)";  }  /**   * Get the value of UpperSize.   *   * @return Value of UpperSize.   */  public int getUpperSize() {        return m_UpperSize;  }    /**   * Set the value of UpperSize.

⌨️ 快捷键说明

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