⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pairedttester.java

📁 MacroWeka扩展了著名数据挖掘工具weka
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
   *
   * @param baseResultset the index of the base resultset
   * @param comparisonColumn the index of the column to compare over
   * @param maxWidthMean width for the mean
   * @param maxWidthStdDev width for the standard deviation
   * @return the comparison table string
   */
  private String multiResultsetFullLatex(int baseResultset,
					 int comparisonColumn,
					 int maxWidthMean,
					 int maxWidthStdDev) {

    StringBuffer result = new StringBuffer(1000);
    String tmpStr = "";
    int numcols = getNumDisplayedResultsets() * 2;
    if (m_ShowStdDevs) {
      numcols += getNumDisplayedResultsets();
    }

    result.append("\\begin{table}[thb]\n\\caption{\\label{labelname}"
		  +"Table Caption}\n");
    if (!m_ShowStdDevs) {
      result.append("\\footnotesize\n");
    } else {
      result.append("\\scriptsize\n");
    }

    // output the column alignment characters
    // one for the dataset name and one for the comparison column
    if (!m_ShowStdDevs) {
      result.append("{\\centering \\begin{tabular}{ll");
    } else {
      // dataset, mean, std dev
      result.append("{\\centering \\begin{tabular}{lr@{\\hspace{0cm}}l");
    }

    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;
      if (j != baseResultset) {
	if (!m_ShowStdDevs) {
	  result.append("l@{\\hspace{0.1cm}}l");
	} else {
	  result.append("r@{\\hspace{0cm}}l@{\\hspace{0cm}}r");
	}
      }
    }
    result.append("}\n\\\\\n\\hline\n");
    if (!m_ShowStdDevs) {
      result.append("Data Set & ("+(baseResultset+1)+")");
    } else {
      result.append("Data Set & \\multicolumn{2}{c}{("+(baseResultset+1)+")}");
    }

    // now do the column names (numbers)
    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;
      if (j != baseResultset) {
	if (!m_ShowStdDevs) {
	  result.append("& (" + (j + 1) + ") & ");
	} else {
	  result.append("& \\multicolumn{3}{c}{(" + (j + 1) + ")} ");
	}
      }
    }
    result.append("\\\\\n\\hline\n");
    
    int datasetLength = 25;
    int resultsetLength = maxWidthMean + 5 + m_MeanPrec;
    if (m_ShowStdDevs) {
      resultsetLength += (maxWidthStdDev + 8 + m_StdDevPrec);
    }

    for (int i = 0; i < getNumDatasets(); i++) {
      // Print the name of the dataset
      String datasetName = 
	templateString(m_DatasetSpecifiers.specifier(i)).replace('_','-');
      try {
	PairedStats pairedStats = 
	  calculateStatistics(m_DatasetSpecifiers.specifier(i), 
			      baseResultset, baseResultset,
			      comparisonColumn);
	datasetName = Utils.padRight(datasetName, datasetLength);
	result.append(datasetName);

	
	if (!m_ShowStdDevs) {
	  tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 5, m_MeanPrec);
	} else {
	  tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 5, m_MeanPrec) + "$\\pm$";
	  if (Double.isNaN(pairedStats.xStats.stdDev)) {
	    tmpStr += "&" + Utils.doubleToString(0.0, maxWidthStdDev + 3, m_StdDevPrec) + " ";
	  } else {
	    tmpStr += "&" + padIt(pairedStats.xStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + " ";
	  }
	}
	if (tmpStr.length() < resultsetLength - 2)
	  tmpStr = Utils.padLeft(tmpStr, resultsetLength - 2);
	result.append("& ")
	      .append(tmpStr);
	// Iterate over the resultsets
	for (int j = 0; j < getNumResultsets(); j++) {
          if (!displayResultset(j))
            continue;
	  if (j != baseResultset) {
	    try {
	      pairedStats = 
		calculateStatistics(m_DatasetSpecifiers.specifier(i), 
				    baseResultset, j, comparisonColumn);
	      String sigString = "         ";
	      if (pairedStats.differencesSignificance < 0) {
		sigString = "$\\circ$  ";
	      } else if (pairedStats.differencesSignificance > 0) {
		sigString = "$\\bullet$";
	      } 
	      if (!m_ShowStdDevs) {
		tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec);
	      } else {
		tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec) + "$\\pm$";
		if (Double.isNaN(pairedStats.yStats.stdDev)) {
		  tmpStr += "&" + Utils.doubleToString(0.0, maxWidthStdDev + 3, m_StdDevPrec) + " ";
		} else {
		  tmpStr += "&" + padIt(pairedStats.yStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + " ";
		}
	      }
	      if (tmpStr.length() < resultsetLength - 2)
	        tmpStr = Utils.padLeft(tmpStr, resultsetLength - 2);
	      result.append(" & ")
	            .append(tmpStr)
	            .append(" & ")
	            .append(sigString);
	    } catch (Exception ex) {
	      ex.printStackTrace();
	      result.append(Utils.padLeft("", resultsetLength + 1));
	    }
	  }
	}
	result.append("\\\\\n");
      } catch (Exception ex) {
	ex.printStackTrace();
      }
    }

    result.append("\\hline\n\\multicolumn{"+numcols+"}{c}{$\\circ$, $\\bullet$"
		  +" statistically significant improvement or degradation}"
		  +"\\\\\n\\end{tabular} ");
    if (!m_ShowStdDevs) {
      result.append("\\footnotesize ");
      } else {
	result.append("\\scriptsize ");
      }
    
    result.append("\\par}\n\\end{table}"
		  +"\n");
    return result.toString();
  }

  /**
   * pads the given double on the left side with blanks and returns the string
   * 
   * @param value the value to print as string
   * @param a the width of the double
   * @param b the precision of the double (digits after period)
   * @return the double as left-padded string
   */
  private String padIt(double value, int a, int b) {
    String res = Utils.doubleToString(value,
				      a, b);
    int precision = 0;  
    int width = res.length();

    res = res.trim();
    
    // how many "0" to add? -> determine current precision digits
    if (res.indexOf(".") == -1) {
      if (b > 0)
        res += ".";
      precision = 0;
    }
    else {
      precision = res.substring(res.indexOf(".") + 1).length();
    }
    for (int i = precision; i < b; i++)
      res += "0";

    while (res.length() < width) {
      res = " " + res;
    }
    return res;
  }
  
  /**
   * Generates a comparison table in latex table format
   *
   * @param baseResultset the index of the base resultset
   * @param comparisonColumn the index of the column to compare over
   * @param maxWidthMean width for the mean
   * @param maxWidthStdDev width for the standard deviation
   * @return the comparison table string
   */
  private String multiResultsetFullPlainText(int baseResultset,
                                             int comparisonColumn,
                                             int maxWidthMean,
                                             int maxWidthStdDev) {

    StringBuffer result = new StringBuffer(1000);
    String tmpStr = "";
    int datasetLength = 25;
    //    int resultsetLength = 9;
    //    int resultsetLength = 16;
    int resultsetLength = maxWidthMean + 5 + m_MeanPrec;
    if (m_ShowStdDevs) {
      resultsetLength += (maxWidthStdDev + 3 + m_StdDevPrec);
    }

    // Set up the titles
    StringBuffer titles = new StringBuffer(Utils.padRight("Dataset",
                                                          datasetLength));
    titles.append(' ');
    StringBuffer label 
      = new StringBuffer(Utils.padLeft("(" + (baseResultset + 1)
                                       + ") "
                                       + getResultsetName(baseResultset),
                                       resultsetLength + 3));

    titles.append(label);
    StringBuffer separator = new StringBuffer(Utils.padRight("",
                                                             datasetLength));
    while (separator.length() < titles.length()) {
      separator.append('-');
    }
    separator.append("---");
    titles.append(" | ");
    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;
      if (j != baseResultset) {
        label = new StringBuffer(Utils.padLeft("(" + (j + 1) + ") "
                                               + getResultsetName(j), resultsetLength));
        titles.append(label).append(' ');
        for (int i = 0; i < label.length(); i++) {
          separator.append('-');
        }
        separator.append('-');
      }
    }
    result.append(titles).append('\n').append(separator).append('\n');
    
    // Iterate over datasets
    int [] win = new int [getNumResultsets()];
    int [] loss = new int [getNumResultsets()];
    int [] tie = new int [getNumResultsets()];
    StringBuffer skipped = new StringBuffer("");
    for (int i = 0; i < getNumDatasets(); i++) {
      // Print the name of the dataset
      String datasetName = 
        templateString(m_DatasetSpecifiers.specifier(i));
      try {
        PairedStats pairedStats = 
          calculateStatistics(m_DatasetSpecifiers.specifier(i), 
                              baseResultset, baseResultset,
                              comparisonColumn);
        datasetName = Utils.padRight(datasetName, datasetLength);
        result.append(datasetName);
        result.append(Utils.padLeft('(' + Utils.doubleToString(pairedStats.count, 0) + ')', 5))
              .append(' ');
        if (!m_ShowStdDevs) {
	  tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 1 + m_MeanPrec, m_MeanPrec);
        } else {
          tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 1 + m_MeanPrec, m_MeanPrec);
          if (Double.isInfinite(pairedStats.xStats.stdDev)) {
            tmpStr += '(' + Utils.padRight("Inf", maxWidthStdDev + 1 + m_StdDevPrec) +')';
          } else {
            tmpStr += '(' + padIt(pairedStats.xStats.stdDev, maxWidthStdDev + 1 + m_StdDevPrec, m_StdDevPrec) + ')';
          }
        }
        result.append(Utils.padLeft(tmpStr, resultsetLength - 2)).append(" | ");
        // Iterate over the resultsets
        for (int j = 0; j < getNumResultsets(); j++) {
          if (!displayResultset(j))
            continue;
          if (j != baseResultset) {
            try {
              pairedStats = 
                calculateStatistics(m_DatasetSpecifiers.specifier(i), 
                                    baseResultset, j, comparisonColumn);
              char sigChar = ' ';
              if (pairedStats.differencesSignificance < 0) {
                sigChar = 'v';
                win[j]++;
              } else if (pairedStats.differencesSignificance > 0) {
                sigChar = '*';
                loss[j]++;
              } else {
                tie[j]++;
              }
              if (!m_ShowStdDevs) {
                tmpStr = padIt(pairedStats.yStats.mean, resultsetLength - 2, m_MeanPrec);
              } else {
                tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec);
                if (Double.isInfinite(pairedStats.yStats.stdDev)) {
                  tmpStr += '(' + Utils.padRight("Inf", maxWidthStdDev + 3) + ')';
                } else {
                  tmpStr += '(' + padIt(pairedStats.yStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + ')';
                }
              }
              result.append(Utils.padLeft(tmpStr, resultsetLength - 2))
                    .append(' ')
                    .append(sigChar)
                    .append(' ');
            } catch (Exception ex) {
              ex.printStackTrace();
              result.append(Utils.padLeft("", resultsetLength + 1));
            }
          }
        }
        result.append('\n');
      } catch (Exception ex) {
        ex.printStackTrace();
        skipped.append(datasetName).append(' ');
      }
    }
    result.append(separator).append('\n');
    result.append(Utils.padLeft("(v/ /*)", datasetLength + 4 +
                                resultsetLength)).append(" | ");
    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;
      if (j != baseResultset) {
        result.append(Utils.padLeft("(" + win[j] + '/' + tie[j]
                                    + '/' + loss[j] + ')',
                                    resultsetLength)).append(' ');
      }
    }
    result.append('\n');
    if (!skipped.equals("")) {
      result.append("Skipped: ").append(skipped).append('\n');
    }
    return result.toString();
  }
  
  /**
   * Generates a comparison table in CSV table format
   *
   * @param baseResultset the index of the base resultset
   * @param comparisonColumn the index of the column to compare over
   * @param maxWidthMean width for the mean
   * @param maxWidthStdDev width for the standard deviation
   * @return the comparison table string
   */
  private String multiResultsetFullCSV(int baseResultset,
                                       int comparisonColumn,
                                       int maxWidthMean,
                                       int maxWidthStdDev) {
    StringBuffer result = new StringBuffer(1000);
    
    int resultsetLength = maxWidthMean + 7;
    if (m_ShowStdDevs) {
      resultsetLength += (maxWidthStdDev + 5);
    }
    
    // Set up the titles
    StringBuffer titles = new StringBuffer("Dataset");
    titles.append(",");
    StringBuffer label  = new StringBuffer(Utils.quote("(" + (baseResultset + 1)
                                           + ") "
                                           + getResultsetName(baseResultset)));
    
    titles.append(label);
    if (m_ShowStdDevs)
      titles.append(",")
            .append("StdDev");
    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;
      if (j != baseResultset) {
        label = new StringBuffer(Utils.quote("(" + (j + 1) + ") " + getResultsetName(j)));
        titles.append(",")
              .append(label)
              .append(",");
        if (m_ShowStdDevs)
          titles.append("StdDev")
                .append(",");
      }
    }
    result.append(titles).append('\n');
    
    // Iterate over datasets
    int [] win = new int [getNumResultsets()];
    int [] loss = new int [getNumResultsets()];
    int [] tie = new int [getNumResultsets()];
    StringBuffer skipped = new StringBuffer("");
    for (int i = 0; i < getNumDatasets(); i++) {
      // Print the name of the dataset
      String datasetName = 
        templateString(m_DatasetSpecifiers.specifier(i));
      try {
        PairedStats pairedStats = 
          calculateStatistics(m_DatasetSpecifiers.specifier(i), 
              baseResultset, baseResultset,
              comparisonColumn);
        result.append(Utils.quote(datasetName + Utils.doubleToString(pairedStats.count, 0)));
        if (!m_ShowStdDevs) {
          result.append(',')
                .append(padIt(pairedStats.xStats.mean, resultsetLength - 2, m_MeanPrec).trim());
        } 
        else {
          result.append(',')
                .append(padIt(pairedStats.xStats.mean, (maxWidthMean+5), m_MeanPrec).trim());
          if (Double.isInfinite(pairedStats.xStats.stdDev)) {
            result.append(',')
                  .append("Inf");
          } 
          else {
            result.append(',')
                  .append(padIt(pairedStats.xStats.stdDev, (maxWidthStdDev+3), m_StdDevPrec));
          }
        }
        // Iterate over the resultsets
        for (int j = 0; j < getNumResultsets(); j++) {
          if (!displayResultset(j))
            continue;
          if (j != baseResultset) {
            try {
              pairedStats = 
                calculateStatistics(m_DatasetSpecifiers.specifier(i), 
                    baseResultset, j, comparisonColumn);
              char sigChar = ' ';
              if (pairedStats.differencesSignificance < 0) {
                sigChar = 'v';
                win[j]++;
              } 
              else 
                if (pairedStats.differencesSignificance > 0) {
                  sigChar = '*';
                  loss[j]++;
                } 
                else {
                  tie[j]++;
                }
              if (!m_ShowStdDevs) {
                result.append(',')
                      .append(padIt(pairedStats.yStats.mean, resultsetLength - 2, m_MeanPrec).trim())
                      .append(',')
                      .append(sigChar);
              } 
              else {
                result.append(',')
                      .append(padIt(pairedStats.yStats.mean, (maxWidthMean+5), m_MeanPrec).trim());
                if (Double.isInfinite(pairedStats.yStats.stdDev)) {
                  result.append(',')
                        .append("Inf");
                } 
                else {
                  result.append(',')
                        .append(padIt(pairedStats.yStats.stdDev, (maxWidthStdDev+3), m_StdDevPrec).trim());
                }
                result.append(',')
                      .append(sigChar);
              }
            } catch (Exception ex) {
              ex.printStackTrace();
            }
          }
        }
        result.append('\n');
      } 
      catch (Exception ex) {
        ex.printStackTrace();
        if (skipped.length() > 0)
          skipped.append(',');
        skipped.append(datasetName);
      }
    }
    result.append(',')
          .append(Utils.quote("(v/ /*)"));
    if (m_ShowStdDevs)
      result.append(',');
    for (int j = 0; j < getNumResultsets(); j++) {
      if (!displayResultset(j))
        continue;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -