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

📄 sumconditionalobjectivefunction.java

📁 Standord Classifier实现了一个基于Java的最大熵分类器。用于模式识别
💻 JAVA
字号:
package edu.stanford.nlp.classify;import java.util.*;import edu.stanford.nlp.optimization.*;/** @author Dan Klein */public class SumConditionalObjectiveFunction extends LogConditionalObjectiveFunction {  protected void calculate(double[] x) {    //System.out.println("Checking at: "+x[0]+" "+x[1]+" "+x[2]);    value = 0.0;    Arrays.fill(derivative, 0.0);    double[] sums = new double[numClasses];    double[] probs = new double[numClasses];    double[] counts = new double[numClasses];    Arrays.fill(counts, 0.0);    for (int d=0; d<data.length; d++) {      int[] features = data[d];      // activation      Arrays.fill(sums, 0.0);      for (int c=0; c<numClasses; c++) {	for (int f=0; f<features.length; f++) {	  int i = indexOf(features[f], c);	  sums[c] += x[i];	}      }      // expectation      double total = Double.NEGATIVE_INFINITY;      for (int c=0; c<numClasses; c++) {	total = addLPs(total, sums[c]);      }      int ld = labels[d];      for (int c=0; c<numClasses; c++) {	probs[c] = Math.exp(sums[c]-total);	for (int f=0; f<features.length; f++) {	  int i = indexOf(features[f], c);	  derivative[i] += probs[ld]*probs[c];	}      }      // observed      for (int f=0; f<features.length; f++) {	int i = indexOf(features[f], labels[d]);	derivative[i] -= probs[ld];      }      value -= probs[ld];    }    // priors    if (true) {      for (int i=0; i<x.length; i++) {	double k = 1.0;	double w = x[i];	value += k*w*w/2.0;	derivative[i] += k*w;      }    }  }  public SumConditionalObjectiveFunction(int numFeatures, int numClasses, int[][] data, int[] labels) {    super(numFeatures, numClasses, data, labels);  }}

⌨️ 快捷键说明

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