protected void doPrintHeader() {
    if (m_Header.classAttribute().isNominal()) {
      if (m_OutputDistribution) {
	append("inst#" + m_Delimiter + "actual" + m_Delimiter + "predicted" + m_Delimiter + "error" + m_Delimiter + "distribution");
	for (int i = 1; i < m_Header.classAttribute().numValues(); i++)
	  append(m_Delimiter);
      }
      else {
	append("inst#" + m_Delimiter + "actual" + m_Delimiter + "predicted" + m_Delimiter + "error" + m_Delimiter + "prediction");
      }
    }
    else {
      append("inst#" + m_Delimiter + "actual" + m_Delimiter + "predicted" + m_Delimiter + "error");
    }
    
    if (m_Attributes != null) {
      append(m_Delimiter);
      boolean first = true;
      for (int i = 0; i < m_Header.numAttributes(); i++) {
        if (i == m_Header.classIndex())
          continue;

        if (m_Attributes.isInRange(i)) {
          if (!first)
            append(m_Delimiter);
          append(m_Header.attribute(i).name());
          first = false;
        }
      }
    }
    
    append("\n");
  }