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

📄 testinstances.java

📁 矩阵的QR分解算法
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
      }    }        switch (attType) {      case Attribute.NOMINAL:        FastVector nomStrings = new FastVector(valIndex + 1);        for (int j = 0; j < nomCount; j++)          nomStrings.addElement(prefix + (j + 1));        result = new Attribute(name, nomStrings);        break;              case Attribute.NUMERIC:        result = new Attribute(name);        break;              case Attribute.STRING:        result = new Attribute(name, (FastVector) null);        break;              case Attribute.DATE:        result = new Attribute(name, "yyyy-mm-dd");        break;              case Attribute.RELATIONAL:        Instances rel;        if (index == CLASS_IS_LAST)          rel = getRelationalClassFormat();        else          rel = getRelationalFormat(index);                if (rel == null) {          TestInstances dataset = new TestInstances();          dataset.setNumNominal(getNumRelationalNominal());          dataset.setNumNominalValues(getNumRelationalNominalValues());          dataset.setNumNumeric(getNumRelationalNumeric());          dataset.setNumString(getNumRelationalString());          dataset.setNumDate(getNumRelationalDate());          dataset.setNumInstances(0);          dataset.setClassType(Attribute.NOMINAL);  // dummy to avoid endless recursion, will be deleted anyway          rel = new Instances(dataset.generate());          if (!getNoClass()) {            int clsIndex = rel.classIndex();            rel.setClassIndex(-1);            rel.deleteAttributeAt(clsIndex);          }        }        result = new Attribute(name, rel);        break;              default:        throw new IllegalArgumentException("Attribute type '" + attType + "' unknown!");    }        return result;  }    /**   * Generates the class value   *    * @param data  	the dataset to work on   * @return      	the new class value   * @throws Exception 	if something goes wrong   */  protected double generateClassValue(Instances data) throws Exception {    double result = Double.NaN;        switch (m_ClassType) {      case Attribute.NUMERIC:        result = m_Random.nextFloat() * 0.25            + Math.abs(m_Random.nextInt())            % Math.max(2, m_NumNominal);        break;              case Attribute.NOMINAL:        result = Math.abs(m_Random.nextInt()) % data.numClasses();        break;              case Attribute.STRING:        String str = "";        for (int n = 0; n < m_Words.length; n++) {          if ( (n > 0) && (m_WordSeparators.length() != 0) )            str += m_WordSeparators.charAt(m_Random.nextInt(m_WordSeparators.length()));          str += m_Words[m_Random.nextInt(m_Words.length)];        }        result = data.classAttribute().addStringValue(str);        break;              case Attribute.DATE:        result = data.classAttribute().parseDate(                (2000 + m_Random.nextInt(100)) + "-01-01");        break;              case Attribute.RELATIONAL:        if (getRelationalClassFormat() != null) {          result = data.classAttribute().addRelation(getRelationalClassFormat());        }        else {          TestInstances dataset = new TestInstances();          dataset.setNumNominal(getNumRelationalNominal());          dataset.setNumNominalValues(getNumRelationalNominalValues());          dataset.setNumNumeric(getNumRelationalNumeric());          dataset.setNumString(getNumRelationalString());          dataset.setNumDate(getNumRelationalDate());          dataset.setNumInstances(getNumInstancesRelational());          dataset.setClassType(Attribute.NOMINAL);  // dummy to avoid endless recursion, will be deleted anyway          Instances rel = new Instances(dataset.generate());          int clsIndex = rel.classIndex();          rel.setClassIndex(-1);          rel.deleteAttributeAt(clsIndex);          result = data.classAttribute().addRelation(rel);        }        break;    }        return result;  }    /**   * Generates a new value for the specified attribute. The classValue   * might be used in the process.   *    * @param data          the dataset to work on   * @param index         the index of the attribute   * @param classVal      the class value for the current instance, might be    *                      used in the calculation   * @return              the new attribute value   * @throws Exception    if something goes wrong   */  protected double generateAttributeValue(Instances data, int index, double classVal) throws Exception {    double result = Double.NaN;        switch (data.attribute(index).type()) {      case Attribute.NUMERIC:        result = classVal * 4 + m_Random.nextFloat() * 1 - 0.5;        break;              case Attribute.NOMINAL:        if (m_Random.nextFloat() < 0.2) {          result = Math.abs(m_Random.nextInt())          % data.attribute(index).numValues();        } else {          result = ((int)classVal) % data.attribute(index).numValues();        }	//result = m_Random.nextInt(data.attribute(index).numValues());        break;              case Attribute.STRING:        String str = "";        for (int n = 0; n < m_Words.length; n++) {          if ( (n > 0) && (m_WordSeparators.length() != 0) )            str += m_WordSeparators.charAt(m_Random.nextInt(m_WordSeparators.length()));          str += m_Words[m_Random.nextInt(m_Words.length)];        }        result = data.attribute(index).addStringValue(str);        break;              case Attribute.DATE:        result = data.attribute(index).parseDate(                (2000 + m_Random.nextInt(100)) + "-01-01");        break;              case Attribute.RELATIONAL:        Instances rel = new Instances(data.attribute(index).relation(), 0);        for (int n = 0; n < getNumInstancesRelational(); n++) {          Instance inst = new Instance(rel.numAttributes());          inst.setDataset(data);          for (int i = 0; i < rel.numAttributes(); i++) {            inst.setValue(i, generateAttributeValue(rel, i, 0));          }          rel.add(inst);        }        result = data.attribute(index).addRelation(rel);        break;    }        return result;  }    /**   * generates a new dataset.   *    * @return 		the generated data   * @throws Exception	if something goes wrong   */  public Instances generate() throws Exception {    if (getMultiInstance()) {      TestInstances bag = (TestInstances) this.clone();      bag.setMultiInstance(false);      bag.setNumInstances(0);      bag.setSeed(m_Random.nextInt());      Instances bagFormat = bag.generate();      bagFormat.setClassIndex(-1);      bagFormat.deleteAttributeAt(bagFormat.numAttributes() - 1);      // generate multi-instance structure      TestInstances structure = new TestInstances();      structure.setSeed(m_Random.nextInt());      structure.setNumNominal(1);      structure.setNumRelational(1);      structure.setRelationalFormat(0, bagFormat);      structure.setClassType(getClassType());      structure.setNumClasses(getNumClasses());      structure.setRelationalClassFormat(getRelationalClassFormat());      structure.setNumInstances(getNumInstances());      m_Data = structure.generate();            // generate bags      bag.setNumInstances(getNumInstancesRelational());      for (int i = 0; i < getNumInstances(); i++) {        bag.setSeed(m_Random.nextInt());        Instances bagData = new Instances(bag.generate());        bagData.setClassIndex(-1);        bagData.deleteAttributeAt(bagData.numAttributes() - 1);        double val = m_Data.attribute(1).addRelation(bagData);        m_Data.instance(i).setValue(1, val);      }    }    else {      // initialize      int clsIndex = m_ClassIndex;      if (clsIndex == CLASS_IS_LAST)        clsIndex = getNumAttributes() - 1;      // generate attributes      FastVector attributes = new FastVector(getNumAttributes());      // Add Nominal attributes      for (int i = 0; i < getNumNominal(); i++)        attributes.addElement(generateAttribute(i, Attribute.NOMINAL));            // Add m_Numeric attributes      for (int i = 0; i < getNumNumeric(); i++)        attributes.addElement(generateAttribute(i, Attribute.NUMERIC));            // Add some String attributes...      for (int i = 0; i < getNumString(); i++)        attributes.addElement(generateAttribute(i, Attribute.STRING));            // Add some Date attributes...      for (int i = 0; i < getNumDate(); i++)        attributes.addElement(generateAttribute(i, Attribute.DATE));            // Add some Relational attributes...      for (int i = 0; i < getNumRelational(); i++)        attributes.addElement(generateAttribute(i, Attribute.RELATIONAL));            // Add class attribute      if (clsIndex != NO_CLASS)	attributes.insertElementAt(generateAttribute(CLASS_IS_LAST, getClassType()), clsIndex);            m_Data = new Instances(getRelation(), attributes, getNumInstances());      m_Data.setClassIndex(clsIndex);      // generate instances      for (int i = 0; i < getNumInstances(); i++) {        Instance current = new Instance(getNumAttributes());        current.setDataset(m_Data);        // class        double classVal;        if (clsIndex != NO_CLASS) {          classVal = generateClassValue(m_Data);          current.setClassValue(classVal);        }        else {          classVal = m_Random.nextFloat();        }                // other attributes        for (int n = 0; n < getNumAttributes(); n++) {          if (clsIndex == n)            continue;                    current.setValue(n, generateAttributeValue(m_Data, n, classVal));        }                m_Data.add(current);      }    }    if (m_Data.classIndex() == NO_CLASS)      m_Data.setClassIndex(-1);        return getData();  }    /**   * returns a TestInstances instance setup already for the the given   * capabilities.   *    * @param c		the capabilities to base the TestInstances on   * @return		the configured TestInstances object   */  public static TestInstances forCapabilities(Capabilities c) {    TestInstances	result;        result = new TestInstances();        // multi-instance?    if (c.getOwner() instanceof MultiInstanceCapabilitiesHandler) {      Capabilities multi = (Capabilities) ((MultiInstanceCapabilitiesHandler) c.getOwner()).getMultiInstanceCapabilities().clone();      multi.setOwner(null);  // otherwise recursive!      result = forCapabilities(multi);      result.setMultiInstance(true);    }    else  {      // class      if (c.handles(Capability.NO_CLASS))	result.setClassIndex(NO_CLASS);      else if (c.handles(Capability.NOMINAL_CLASS))	result.setClassType(Attribute.NOMINAL);      else if (c.handles(Capability.BINARY_CLASS))	result.setClassType(Attribute.NOMINAL);      else if (c.handles(Capability.NUMERIC_CLASS))	result.setClassType(Attribute.NUMERIC);      else if (c.handles(Capability.DATE_CLASS))	result.setClassType(Attribute.DATE);      else if (c.handles(Capability.STRING_CLASS))	result.setClassType(Attribute.STRING);      else if (c.handles(Capability.RELATIONAL_CLASS))	result.setClassType(Attribute.RELATIONAL);      // # of classes      if (c.handles(Capability.UNARY_CLASS))	result.setNumClasses(1);      if (c.handles(Capability.BINARY_CLASS))	result.setNumClasses(2);      if (c.handles(Capability.NOMINAL_CLASS))	result.setNumClasses(4);            // attributes      if (c.handles(Capability.NOMINAL_ATTRIBUTES)) {	result.setNumNominal(1);	result.setNumRelationalNominal(1);      }      else {	result.setNumNominal(0);	result.setNumRelationalNominal(0);      }      if (c.handles(Capability.NUMERIC_ATTRIBUTES)) {	result.setNumNumeric(1);	result.setNumRelationalNumeric(1);      }      else {	result.setNumNumeric(0);	result.setNumRelationalNumeric(0);      }      if (c.handles(Capability.DATE_ATTRIBUTES)) {	result.setNumDate(1);	result.setNumRelationalDate(1);      }      else {	result.setNumDate(0);	result.setNumRelationalDate(0);      }            if (c.handles(Capability.STRING_ATTRIBUTES)) {	result.setNumString(1);	result.setNumRelationalString(1);      }      else {	result.setNumString(0);	result.setNumRelationalString(0);      }            if (c.handles(Capability.RELATIONAL_ATTRIBUTES))	result.setNumRelational(1);      else	result.setNumRelational(0);    }        return result;  }    /**   * returns a string representation of the object   *    * @return		a string representation of the object   */  public String toString() {    String	result;        result = "";    result += "Relation: " + getRelation() + "\n";    result += "Seed: " + getSeed() + "\n";    result += "# Instances: " + getNumInstances() + "\n";    result += "ClassType: " + getClassType() + "\n";    result += "# Classes: " + getNumClasses() + "\n";    result += "Class index: " + getClassIndex() + "\n";    result += "# Nominal: " +     getNumNominal() + "\n";    result += "# Nominal values: " + getNumNominalValues() + "\n";    result += "# Numeric: " + getNumNumeric() + "\n";    result += "# String: " + getNumString() + "\n";    result += "# Date: " + getNumDate() + "\n";    result += "# Relational: " + getNumRelational() + "\n";    result += "  - # Nominal: " +     getNumRelationalNominal() + "\n";    result += "  - # Nominal values: " + getNumRelationalNominalValues() + "\n";    result += "  - # Numeric: " + getNumRelationalNumeric() + "\n";    result += "  - # String: " + getNumRelationalString() + "\n";    result += "  - # Date: " + getNumRelationalDate() + "\n";    result += "  - # Instances: " + getNumInstancesRelational() + "\n";    result += "Multi-Instance: " + getMultiInstance() + "\n";    result += "Words: " + getWords() + "\n";    result += "Word separators: " + getWordSeparators() + "\n";        return result;  }    /**   * for running the class from commandline, prints the generated data   * to stdout   *    * @param args	the commandline parameters   * @throws Exception	if something goes wrong   */  public static void main(String[] args) throws Exception {    TestInstances inst;        inst = new TestInstances();    // help requested?    if (Utils.getFlag("h", args) || Utils.getFlag("help", args)) {      StringBuffer result = new StringBuffer();      result.append("\nTest data generator options:\n\n");      result.append("-h|-help\n\tprints this help\n");            Enumeration enm = inst.listOptions();      while (enm.hasMoreElements()) {        Option option = (Option) enm.nextElement();        result.append(option.synopsis() + "\n" + option.description() + "\n");      }      System.out.println(result);      System.exit(0);    }        // generate data    inst.setOptions(args);    System.out.println(inst.generate());  }}

⌨️ 快捷键说明

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