docs: public static FeatureStandardizer estimateFrom(Collection<DiscreteFactor> featureFactors, 
        int featureVariableNum, Assignment biasFeature, double rescalingFactor) {
      Preconditions.checkArgument(featureFactors.size() > 0);
      
      DiscreteFactor means = getMeans(featureFactors, featureVariableNum);
      DiscreteFactor variances = getVariances(featureFactors, featureVariableNum);
      DiscreteFactor stdDev = new TableFactor(variances.getVars(), variances.getWeights().elementwiseSqrt());
      
      VariableNumMap featureVariable = Iterables.getFirst(featureFactors, null).getVars()
          .intersection(featureVariableNum);
      DiscreteFactor offset = null;
      if (biasFeature == null || biasFeature.size() == 0) {
        offset = TableFactor.zero(featureVariable);
      } else {
        offset = TableFactor.pointDistribution(featureVariable, biasFeature);
      }
  
      return new FeatureStandardizer(means, stdDev.inverse(), offset, rescalingFactor);
    }