public double infoX(Integer featureId) {
		double result = 0D;
		for (String fValue : Feature.possibleFeatures.get(featureId).getPossibleValues()) {
			double positive = 0.0;
			double negative = 0.0;
			for (ClassifiableObject co : partitionedObjects.get(fValue)) {
				if (co.isAcceptable()) {
					positive++;
				} else {
					negative++;
				}
			}
			/*
			 double groupSize = partitionedObjects.get(fValue).size();
			 double a = groupSize/trainingSet.size();
			 double b = (positive/groupSize)*log2(positive/groupSize);
			 double c = (negative/groupSize)*log2(negative/groupSize);
			 /*result += groupSize/trainingSet.size() *
			 (-positive/groupSize*log2(positive/groupSize)
			 -negative/groupSize*log2(negative/groupSize));
			 */
			double groupSize = (double) partitionedObjects.get(fValue).size();
			result += groupSize / (double) trainingSet.size()
					* entropy(positive / groupSize, negative / groupSize);
		}
		return result;
	}