protected void doPrintHeader() {
    append("<html>\n");
    append("<head>\n");
    append("<title>Predictions for dataset " + sanitize(m_Header.relationName()) + "</title>\n");
    append("</head>\n");
    append("<body>\n");
    append("<div align=\"center\">\n");
    append("<h3>Predictions for dataset " + sanitize(m_Header.relationName()) + "</h3>\n");
    append("<table border=\"1\">\n");
    append("<tr>\n");
    if (m_Header.classAttribute().isNominal())
      if (m_OutputDistribution)
	append("<td>inst#</td><td>actual</td><td>predicted</td><td>error</td><td colspan=\"" + m_Header.classAttribute().numValues() + "\">distribution</td>");
      else
	append("<td>inst#</td><td>actual</td><td>predicted</td><td>error</td><td>prediction</td>");
    else
      append("<td>inst#</td><td>actual</td><td>predicted</td><td>error</td>");
    
    if (m_Attributes != null) {
      append("<td>");
      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("</td><td>");
          append(sanitize(m_Header.attribute(i).name()));
          first = false;
        }
      }
      append("</td>");
    }
    
    append("</tr>\n");
  }