public String toString() {

    StringBuffer text = new StringBuffer();

    if (m_t == null)
      return "Gaussian Processes: No model built yet.";

    try {

      text.append("Gaussian Processes\n\n");
      text.append("Kernel used:\n  " + m_kernel.toString() + "\n\n");

      text.append("All values shown based on: " + 
                  TAGS_FILTER[m_filterType].getReadable() + "\n\n");


      text.append("Average Target Value : " + m_avg_target + "\n");

      text.append("Inverted Covariance Matrix:\n");
      double min = -m_L[0][0];
      double max = -m_L[0][0];
      for (int i = 0; i < m_NumTrain; i++)
        for (int j = 0; j <= i; j++) {
          if (-m_L[i][j] < min)
            min = -m_L[i][j];
          else if (-m_L[i][j] > max)
            max = -m_L[i][j];
        }
      text.append("    Lowest Value = " + min + "\n");
      text.append("    Highest Value = " + max + "\n");
      text.append("Inverted Covariance Matrix * Target-value Vector:\n");
      min = m_t.get(0, 0);
      max = m_t.get(0, 0);
      for (int i = 0; i < m_NumTrain; i++) {
        if (m_t.get(i, 0) < min)
          min = m_t.get(i, 0);
        else if (m_t.get(i, 0) > max)
          max = m_t.get(i, 0);
      }
      text.append("    Lowest Value = " + min + "\n");
      text.append("    Highest Value = " + max + "\n \n");

    } catch (Exception e) {
      return "Can't print the classifier.";
    }

    return text.toString();
  }