public Map<Integer, AttributeValue> getAttributeValues(InstanceIndexer instanceIndexer)
      throws MLException {
    Map<Integer, AttributeValue> attributeValues = null;
    if (instanceIndexer.getAttributeName() != null) {

      AttributeDO[] attributeDOs = getAttributesByName(instanceIndexer.getAttributeName());
      AttributeDO[] classAttributes = getAttributesByName(Instances.CLASS_NAME);

      Map<Integer, AttributeValue> discreteValuesMap = new HashMap<Integer, AttributeValue>();

      for (int index = 0; index < attributeDOs.length; index++) {
        if (instanceIndexer.getIndexes().contains(index)) {
          String name = attributeDOs[index].getName();
          Integer value = attributeDOs[index].getValue();
          AttributeDO classAttributeDO = classAttributes[index];

          if (discreteValuesMap.containsKey(value)) {
            discreteValuesMap.put(
                value,
                discreteValuesMap
                    .get(value)
                    .incrementAttributeValueCount()
                    .insertOrIncrementClassifiedCountMap(classAttributeDO.getValue()));
          } else {
            discreteValuesMap.put(
                value,
                new AttributeValue(name, value, 1)
                    .insertOrIncrementClassifiedCountMap(classAttributeDO.getValue()));
          }
        }
      }
      attributeValues = discreteValuesMap;

      // bug fix : if there is only one type of instance attribute type, and hence only one entry in
      // map.
      if (attributeValues.size() == 1) {
        if (attributeValues.keySet().contains(1)) {
          discreteValuesMap.put(
              0, new AttributeValue(attributeValues.get(1).getAttributeName(), 0, 0));
        } else {
          discreteValuesMap.put(
              1, new AttributeValue(attributeValues.get(0).getAttributeName(), 1, 0));
        }
      }

    } else {
      throw new MLException(
          "No attribute name mentioned in Indexer, hence cannot provide attribute values !");
    }

    return attributeValues;
  }
  public Map<Integer, AttributeValue> getAttributeValues(String attributeName) throws MLException {
    AttributeDO[] attributes = getAttributesByName(attributeName);
    Map<Integer, AttributeValue> discreteValuesMap = new HashMap<Integer, AttributeValue>();

    for (AttributeDO attribute : attributes) {
      String name = attribute.getName();
      Integer value = attribute.getValue();
      if (discreteValuesMap.containsKey(value))
        discreteValuesMap.put(value, discreteValuesMap.get(value).incrementAttributeValueCount());
      else discreteValuesMap.put(value, new AttributeValue(name, value, 1));
    }

    return discreteValuesMap;
  }
Пример #3
0
 @Override
 public void jdoPostLoad() {
   boardPackage = CacheInstance.getInstance().getPackage(packageKey);
   elements = new HashMap<Key, ElementDO>();
   attributes = new HashMap<Key, AttributeDO>();
   cards = new HashMap<Key, MetaCardDO>();
   skills = new HashMap<Key, SkillDO>();
   for (Element element : boardPackage.getElements()) {
     ElementDO elementDo = (ElementDO) element;
     elements.put(elementDo.getKey(), elementDo);
     for (AttributeDO attributeDo : elementDo.getAttributes()) {
       attributes.put(attributeDo.getKey(), attributeDo);
     }
     for (MetaCardDO card : elementDo.getCards()) {
       cards.put(card.getKey(), card);
       for (Skill skill : card.getSkills()) {
         SkillDO skillDo = (SkillDO) skill;
         skills.put(skillDo.getKey(), skillDo);
       }
     }
   }
   for (PlayerRecordDO player : players) player.restore(this);
   addActionListener(boardPackage.getRule(), this);
 }