コード例 #1
0
  public BigDecimal calculateEntropy(
      Map<Integer, AttributeValue> attributeValues, boolean withVariance) throws MLException {
    if (!withVariance) {
      return calculateEntropy(attributeValues);
    } else {
      BigDecimal attributeEntropyresult = new BigDecimal(0);

      for (AttributeValue attributeValue : attributeValues.values()) {
        int attributeValueCount = attributeValue.getAttributeValueCount();

        BigDecimal innerVarianceResult = new BigDecimal(1);
        for (Integer corrospondingClassifiedCount :
            attributeValue.getClassifiedCountMap().values()) {

          BigDecimal fraction =
              BigDecimal.valueOf(corrospondingClassifiedCount)
                  .divide(new BigDecimal(attributeValueCount), globalMathContext);
          innerVarianceResult.multiply(fraction, globalMathContext);
        }

        attributeValue.setEntropy(innerVarianceResult);
        BigDecimal attributeGlobalFraction =
            BigDecimal.valueOf(attributeValueCount)
                .divide(new BigDecimal(size()), globalMathContext);
        attributeEntropyresult =
            attributeEntropyresult.add(attributeGlobalFraction.multiply(innerVarianceResult));
      }

      return attributeEntropyresult;
    }
  }
コード例 #2
0
  public BigDecimal calculateEntropy(Map<Integer, AttributeValue> attributeValues)
      throws MLException {
    BigDecimal attributeEntropyresult = new BigDecimal(0);

    for (AttributeValue attributeValue : attributeValues.values()) {
      int attributeCount = attributeValue.getAttributeValueCount();

      BigDecimal innerResult = new BigDecimal(0);
      for (Integer corrospondingClassifiedCount : attributeValue.getClassifiedCountMap().values()) {

        BigDecimal fraction =
            BigDecimal.valueOf(corrospondingClassifiedCount)
                .divide(new BigDecimal(attributeCount), globalMathContext);
        BigDecimal logFraction =
            BigDecimal.valueOf(Math.log(fraction.doubleValue()))
                .divide(new BigDecimal(Math.log(2)), globalMathContext);

        innerResult = innerResult.add(fraction.multiply(logFraction, globalMathContext));
      }
      innerResult = innerResult.negate();
      attributeValue.setEntropy(innerResult);

      BigDecimal attributeGlobalFraction =
          BigDecimal.valueOf(attributeValue.getAttributeValueCount())
              .divide(new BigDecimal(size()), globalMathContext);

      attributeEntropyresult =
          attributeEntropyresult.add(attributeGlobalFraction.multiply(innerResult));
    }

    return attributeEntropyresult;
  }