for (int i = 0; i < m_Distributions.length; i++) {
for (int j = 0; j < m_Instances.numClasses(); j++) {
if (m_Distributions[i][0] instanceof NormalEstimator) {
// check mean/precision dev against maxWidth
NormalEstimator n = (NormalEstimator)m_Distributions[i][j];
double mean = Math.log(Math.abs(n.getMean())) / Math.log(10.0);
double precision = Math.log(Math.abs(n.getPrecision())) / Math.log(10.0);
double width = (mean > precision)
? mean
: precision;
if (width < 0) {
width = 1;
}
// decimal + # decimal places + 1
width += 6.0;
if ((int)width > maxWidth) {
maxWidth = (int)width;
}
} else if (m_Distributions[i][0] instanceof KernelEstimator) {
containsKernel = true;
KernelEstimator ke = (KernelEstimator)m_Distributions[i][j];
int numK = ke.getNumKernels();
String temps = "K" + numK + ": mean (weight)";
if (maxAttWidth < temps.length()) {
maxAttWidth = temps.length();
}
// check means + weights against maxWidth
if (ke.getNumKernels() > 0) {
double[] means = ke.getMeans();
double[] weights = ke.getWeights();
for (int k = 0; k < ke.getNumKernels(); k++) {
String m = Utils.doubleToString(means[k], maxWidth, 4).trim();
m += " (" + Utils.doubleToString(weights[k], maxWidth, 1).trim() + ")";
if (maxWidth < m.length()) {
maxWidth = m.length();
}
}
}
} else if (m_Distributions[i][0] instanceof DiscreteEstimator) {
DiscreteEstimator d = (DiscreteEstimator)m_Distributions[i][j];
for (int k = 0; k < d.getNumSymbols(); k++) {
String size = "" + d.getCount(k);
if (size.length() > maxWidth) {
maxWidth = size.length();
}
}
int sum = ("" + d.getSumOfCounts()).length();
if (sum > maxWidth) {
maxWidth = sum;
}
}
}
}
// Check width of class labels
for (int i = 0; i < m_Instances.numClasses(); i++) {
String cSize = m_Instances.classAttribute().value(i);
if (cSize.length() > maxWidth) {
maxWidth = cSize.length();
}
}
// Check width of class priors
for (int i = 0; i < m_Instances.numClasses(); i++) {
String priorP =
Utils.doubleToString(((DiscreteEstimator)m_ClassDistribution).getProbability(i),
maxWidth, 2).trim();
priorP = "(" + priorP + ")";
if (priorP.length() > maxWidth) {
maxWidth = priorP.length();
}
}
if (maxAttWidth < "Attribute".length()) {
maxAttWidth = "Attribute".length();
}
if (maxAttWidth < " weight sum".length()) {
maxAttWidth = " weight sum".length();
}
if (containsKernel) {
if (maxAttWidth < " [precision]".length()) {
maxAttWidth = " [precision]".length();
}
}
maxAttWidth += 2;
temp.append("\n\n");
temp.append(pad("Class", " ",
(maxAttWidth + maxWidth + 1) - "Class".length(),
true));
temp.append("\n");
temp.append(pad("Attribute", " ", maxAttWidth - "Attribute".length(), false));
// class labels
for (int i = 0; i < m_Instances.numClasses(); i++) {
String classL = m_Instances.classAttribute().value(i);
temp.append(pad(classL, " ", maxWidth + 1 - classL.length(), true));
}
temp.append("\n");
// class priors
temp.append(pad("", " ", maxAttWidth, true));
for (int i = 0; i < m_Instances.numClasses(); i++) {
String priorP =
Utils.doubleToString(((DiscreteEstimator)m_ClassDistribution).getProbability(i),
maxWidth, 2).trim();
priorP = "(" + priorP + ")";
temp.append(pad(priorP, " ", maxWidth + 1 - priorP.length(), true));
}
temp.append("\n");
temp.append(pad("", "=", maxAttWidth +
(maxWidth * m_Instances.numClasses())
+ m_Instances.numClasses() + 1, true));
temp.append("\n");
// loop over the attributes
int counter = 0;
for (int i = 0; i < m_Instances.numAttributes(); i++) {
if (i == m_Instances.classIndex()) {
continue;
}
String attName = m_Instances.attribute(i).name();
temp.append(attName + "\n");
if (m_Distributions[counter][0] instanceof NormalEstimator) {
String meanL = " mean";
temp.append(pad(meanL, " ", maxAttWidth + 1 - meanL.length(), false));
for (int j = 0; j < m_Instances.numClasses(); j++) {
// means
NormalEstimator n = (NormalEstimator)m_Distributions[counter][j];
String mean =
Utils.doubleToString(n.getMean(), maxWidth, 4).trim();
temp.append(pad(mean, " ", maxWidth + 1 - mean.length(), true));
}
temp.append("\n");
// now do std deviations
String stdDevL = " std. dev.";
temp.append(pad(stdDevL, " ", maxAttWidth + 1 - stdDevL.length(), false));
for (int j = 0; j < m_Instances.numClasses(); j++) {
NormalEstimator n = (NormalEstimator)m_Distributions[counter][j];
String stdDev =
Utils.doubleToString(n.getStdDev(), maxWidth, 4).trim();
temp.append(pad(stdDev, " ", maxWidth + 1 - stdDev.length(), true));
}
temp.append("\n");
// now the weight sums
String weightL = " weight sum";
temp.append(pad(weightL, " ", maxAttWidth + 1 - weightL.length(), false));
for (int j = 0; j < m_Instances.numClasses(); j++) {
NormalEstimator n = (NormalEstimator)m_Distributions[counter][j];
String weight =
Utils.doubleToString(n.getSumOfWeights(), maxWidth, 4).trim();
temp.append(pad(weight, " ", maxWidth + 1 - weight.length(), true));
}
temp.append("\n");
// now the precisions
String precisionL = " precision";
temp.append(pad(precisionL, " ", maxAttWidth + 1 - precisionL.length(), false));
for (int j = 0; j < m_Instances.numClasses(); j++) {
NormalEstimator n = (NormalEstimator)m_Distributions[counter][j];
String precision =
Utils.doubleToString(n.getPrecision(), maxWidth, 4).trim();
temp.append(pad(precision, " ", maxWidth + 1 - precision.length(), true));
}
temp.append("\n\n");
} else if (m_Distributions[counter][0] instanceof DiscreteEstimator) {