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

📄 linearclassifier.java

📁 Standord Classifier实现了一个基于Java的最大熵分类器。用于模式识别
💻 JAVA
字号:
package edu.stanford.nlp.classify;import java.util.*;import java.text.*;import edu.stanford.nlp.util.*;import edu.stanford.nlp.dbm.*;/** @author Dan Klein */public class LinearClassifier implements Classifier {  Counter weights = null;  Set labels = null;  Set labels() {    return labels;  }  Set features() {    Set features = new HashSet();    for (Iterator i=weights.seenSet().iterator(); i.hasNext();) {      Pair p = (Pair)i.next();      features.add(p.first());    }    return features;  }  public double weight(Object feature, Object label) {    Pair p = new Pair(feature, label);    return weights.countOf(p);  }  public Counter scoresOf(Datum example) {    Counter scores = new Counter();    for (Iterator i=labels().iterator(); i.hasNext();) {      Object l = i.next();      double score = 0.0;      for (Iterator j=example.asFeatures().iterator(); j.hasNext();) {	Object f = j.next();	score += weight(f, l);      }      scores.setCount(l, score);    }    return scores;  }  public void dump() {    Datum allFeatures = new BasicDatum(features(), new String(""));    justificationOf(allFeatures);  }  public void justificationOf(Datum example) {    int featureLength = 0;    int labelLength = 6;    NumberFormat nf = NumberFormat.getNumberInstance();    nf.setMinimumFractionDigits(2);    nf.setMaximumFractionDigits(2);    if (nf instanceof DecimalFormat)      ((DecimalFormat)nf).setPositivePrefix(" ");    for (Iterator j=example.asFeatures().iterator(); j.hasNext();) {      Object f = j.next();      featureLength = Math.max(featureLength, f.toString().length());    }    for (Iterator i=labels().iterator(); i.hasNext();) {      Object l = i.next();      labelLength = Math.max(labelLength, l.toString().length());    }    StringBuffer header = new StringBuffer("");    for (int s=0; s<featureLength; s++) {      header.append(' ');    }    for (Iterator i=labels().iterator(); i.hasNext();) {      Object l = i.next();      header.append(' ');      String str = l.toString();      header.append(str);      for (int s=str.length(); s<labelLength; s++)	header.append(' ');    }    System.out.println(header);    for (Iterator j=example.asFeatures().iterator(); j.hasNext();) {      Object f = j.next();      String fStr = f.toString();      StringBuffer line = new StringBuffer(fStr);      for (int s=fStr.length(); s<featureLength; s++) {	line.append(' ');      }      for (Iterator i=labels().iterator(); i.hasNext();) {	Object l = i.next();	String lStr = nf.format(weight(f, l));	line.append(' ');	line.append(lStr);	for (int s=lStr.length(); s<labelLength; s++) {	  line.append(' ');	}      }      System.out.println(line);    }    Counter scores = scoresOf(example);    StringBuffer footer = new StringBuffer("Total:");    for (int s=footer.length(); s<featureLength; s++) {      footer.append(' ');    }    for (Iterator i=labels().iterator(); i.hasNext();) {      Object l = i.next();      footer.append(' ');      String str = nf.format(scores.countOf(l));      footer.append(str);      for (int s=str.length(); s<labelLength; s++)	footer.append(' ');    }    System.out.println(footer);      }  public Object classOf(Datum example) {    Counter scores = scoresOf(example);    return scores.argmax();  }  Set extractLabels(Counter c) {    Set s = new HashSet();    for (Iterator i=c.seenSet().iterator(); i.hasNext();) {      Pair p = (Pair)i.next();      Object l = p.second();      s.add(l);    }    return s;  }  public LinearClassifier(Counter weights) {    this.weights = weights;    this.labels = extractLabels(weights);  }}

⌨️ 快捷键说明

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