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

📄 matlabpca.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
  }    /** Run matlab in command line with a given argument   * @param inFile file to be input to Matlab   * @param outFile file where results are stored   */  public void runMatlab(String inFile, String outFile) {    // call matlab to do the dirty work    try {      int exitValue;      do {	Process proc = Runtime.getRuntime().exec("matlab -tty < " + inFile + " > " + outFile);	exitValue = proc.waitFor();	if (exitValue != 0) {	  System.err.println("WARNING!!!!!  Matlab returned exit value 1, trying again later!");	  Thread.sleep(300000);	}      } while (exitValue != 0);      if (m_debug) System.out.println("Matlab process done, exitValue=" + exitValue);    } catch (Exception e) {      System.err.println("Problems running matlab: " + e);    }  }         /**   * Return a summary of the analysis   * @return a summary of the analysis.   */  private String principalComponentsSummary() {    StringBuffer result = new StringBuffer();    double cumulative = 0.0;    Instances output = null;    int numVectors=0;    try {      output = setOutputFormat();      numVectors = (output.classIndex() < 0) 	? output.numAttributes()	: output.numAttributes()-1;    } catch (Exception ex) {    }    //tomorrow    result.append("eigenvalue\tproportion\tcumulative\n");    for (int i = 0; i < numVectors; i++) {      cumulative+=m_eigenvalues[i];      result.append(Utils.doubleToString(m_eigenvalues[i],9,5) +"\t"+		    Utils.doubleToString((m_eigenvalues[i] / m_sumOfEigenValues),9,5) +"\t"+		    Utils.doubleToString((cumulative / m_sumOfEigenValues),9,5) +"\t"+		    output.attribute(i).name()+"\n");    }    result.append("\nEigenvectors\n");    for (int j = 1;j <= numVectors;j++) {      result.append(" V"+j+'\t');    }    result.append("\n");    for (int j = 0; j < m_numAttribs; j++) {      for (int i = 0; i < numVectors; i++) {	result.append(Utils.		      doubleToString(m_eigenvectors[j][i],7,4)		      +"\t");      }      result.append(m_trainInstances.attribute(j).name()+'\n');    }    if (m_transBackToOriginal) {      result.append("\nPC space transformed back to original space.\n"		    +"(Note: can't evaluate attributes in the original "		    +"space)\n");    }    return result.toString();  }  /**   * Returns a description of this attribute transformer   * @return a String describing this attribute transformer   */  public String toString() {    if (m_eigenvalues == null) {      return "Principal components hasn't been built yet!";    } else {      return "\tPrincipal Components Attribute Transformer\n\n"	+principalComponentsSummary();    }  }  /**   * Return a matrix as a String   * @param matrix that is decribed as a string   * @return a String describing a matrix   */  private String matrixToString(double [][] matrix) {    StringBuffer result = new StringBuffer();    int last = matrix.length - 1;    for (int i = 0; i <= last; i++) {      for (int j = 0; j <= last; j++) {	result.append(Utils.doubleToString(matrix[i][j],6,2)+" ");	if (j == last) {	  result.append('\n');	}      }    }    return result.toString();  }  /**   * Convert a pc transformed instance back to the original space   */  private Instance convertInstanceToOriginal(Instance inst)    throws Exception {    double[] newVals = null;    if (m_hasClass) {      newVals = new double[m_numAttribs+1];    } else {      newVals = new double[m_numAttribs];    }    if (m_hasClass) {      // class is always appended as the last attribute      newVals[m_numAttribs] = inst.value(inst.numAttributes() - 1);    }    for (int i = 0; i < m_eTranspose[0].length; i++) {      double tempval = 0.0;      for (int j = 1; j < m_eTranspose.length; j++) {	tempval += (m_eTranspose[j][i] * 		    inst.value(j - 1));       }      newVals[i] = tempval;    }        if (inst instanceof SparseInstance) {      return new SparseInstance(inst.weight(), newVals);    } else {      return new Instance(inst.weight(), newVals);    }        }  /**   * Transform an instance in original (unormalized) format. Convert back   * to the original space if requested.   * @param instance an instance in the original (unormalized) format   * @return a transformed instance   * @exception Exception if instance cant be transformed   */  public Instance convertInstance(Instance instance) throws Exception {    if (m_eigenvalues == null) {      throw new Exception("convertInstance: Principal components not "			  +"built yet");    }    double[] newVals = new double[m_outputNumAtts];    Instance tempInst = (Instance)instance.copy();    if (!instance.equalHeaders(m_trainCopy.instance(0))) {      throw new Exception("Can't convert instance: header's don't match: "			  +"MatlabPCA");    }    m_replaceMissingFilter.input(tempInst);    m_replaceMissingFilter.batchFinished();    tempInst = m_replaceMissingFilter.output();    if (m_normalize) {      m_normalizeFilter.input(tempInst);      m_normalizeFilter.batchFinished();      tempInst = m_normalizeFilter.output();    }    if (m_attributeFilter != null) {      m_attributeFilter.input(tempInst);      m_attributeFilter.batchFinished();      tempInst = m_attributeFilter.output();    }    //  double cumulative = 0;    for (int i = 0; i < m_outputNumAtts; i++) {      for (int j = 0; j < m_numAttribs; j++) {	newVals[i] += (m_eigenvectors[j][i] * tempInst.value(j));       }    }    if (m_hasClass) {       newVals[m_outputNumAtts - 1] = instance.value(instance.classIndex());    }        if (!m_transBackToOriginal) {      if (instance instanceof SparseInstance) {	return new SparseInstance(instance.weight(), newVals);      } else {	return new Instance(instance.weight(), newVals);      }          } else {      if (instance instanceof SparseInstance) {	return convertInstanceToOriginal(new SparseInstance(instance.weight(), 							    newVals));      } else {	return convertInstanceToOriginal(new Instance(instance.weight(),						      newVals));      }    }  }  protected String valsToString(double vals[]) {    String s= new String("[ ");    for (int i = 0 ; i < vals.length; i++) {      s = s + vals[i] + "  ";    }    return (s + "]");  }  /**   * Set up the header for the PC->original space dataset   */  private Instances setOutputFormatOriginal() throws Exception {    FastVector attributes = new FastVector();        for (int i = 0; i < m_numAttribs; i++) {      String att = m_trainInstances.attribute(i).name();      attributes.addElement(new Attribute(att));    }        if (m_hasClass) {      attributes.addElement(m_trainCopy.classAttribute().copy());    }    Instances outputFormat =       new Instances(m_trainCopy.relationName()+"->PC->original space",		    attributes, 0);        // set the class to be the last attribute if necessary    if (m_hasClass) {      outputFormat.setClassIndex(outputFormat.numAttributes()-1);    }    return outputFormat;  }  /**   * Set the format for the transformed data   * @return a set of empty Instances (header only) in the new format   * @exception Exception if the output format can't be set   */  private Instances setOutputFormat() throws Exception {    if (m_eigenvalues == null) {      return null;    }    double cumulative = 0.0;    FastVector attributes = new FastVector();    // Create the string representations for the new attributes    // (only up to those that sum up to m_coverVariance    for (int i = 0; i < m_numAttribs; i++) {      StringBuffer attName = new StringBuffer();      for (int j = 0; j < m_numAttribs; j++) {	attName.append(Utils.doubleToString(m_eigenvectors[j][i], 5,3)		       + m_trainInstances.attribute(j).name());	if (j != m_numAttribs - 1) {	  if (m_eigenvectors[j+1][i] >= 0) {	    attName.append(" + ");	  }	}      }      attributes.addElement(new Attribute(attName.toString()));      cumulative+=m_eigenvalues[i];            if ((cumulative / m_sumOfEigenValues) >= m_coverVariance) {	break;      }     }    System.err.println("PCA (" + m_coverVariance + "):  went from " + m_numAttribs +		       " to " + attributes.size() + " attributes");    if (m_hasClass) {      attributes.addElement(m_trainCopy.classAttribute().copy());    }    Instances outputFormat =       new Instances(m_trainInstances.relationName()+"_principal components",		    attributes, 0);    // set the class to be the last attribute if necessary    if (m_hasClass) {      outputFormat.setClassIndex(outputFormat.numAttributes()-1);    }         m_outputNumAtts = outputFormat.numAttributes();    return outputFormat;  }  /** Get a timestamp string as a weak uniqueid   * @returns a timestamp string in the form "mmddhhmmssS"   */       public static String getLogTimestamp() {	Calendar cal = Calendar.getInstance(TimeZone.getDefault());       	String DATE_FORMAT = "MMddHHmmssS";	java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);		sdf.setTimeZone(TimeZone.getDefault());          	return (sdf.format(cal.getTime()));    }    /**   * Main method for testing this class   * @param argv should contain the command line arguments to the   * evaluator/transformer (see AttributeSelection)   */  public static void main(String [] argv) {    try {      System.out.println(AttributeSelection.			 SelectAttributes(new MatlabPCA(), argv));    }    catch (Exception e) {      e.printStackTrace();      System.out.println(e.getMessage());    }  }  }

⌨️ 快捷键说明

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