public ERRScorer copy() { return new ERRScorer(); } /**
/** * Compute ERR at k. NDCG(k) = DCG(k) / DCG_{perfect}(k). Note that the "perfect ranking" must be computed based on the whole list, * not just top-k portion of the list. */ public double score(RankList rl) { int size = k; if(k > rl.size() || k <= 0) size = rl.size(); List<Integer> rel = new ArrayList<Integer>(); for(int i=0;i<rl.size();i++) rel.add((int)rl.get(i).getLabel()); double s = 0.0; double p = 1.0; for(int i=1;i<=size;i++) { double R = R(rel.get(i-1)); s += p*R/i; p *= (1.0 - R); } return s; } public String name()
/** * Compute ERR at k. NDCG(k) = DCG(k) / DCG_{perfect}(k). Note that the "perfect ranking" must be computed based on the whole list, * not just top-k portion of the list. */ @Override public double score(final RankList rl) { int size = k; if (k > rl.size() || k <= 0) { size = rl.size(); } final List<Integer> rel = new ArrayList<>(); for (int i = 0; i < rl.size(); i++) { rel.add((int) rl.get(i).getLabel()); } double s = 0.0; double p = 1.0; for (int i = 1; i <= size; i++) { final double R = R(rel.get(i - 1)); s += p * R / i; p *= (1.0 - R); } return s; }
@Override public ERRScorer copy() { return new ERRScorer(); }
R[i] = R(labels[i]); np[i] = p * (1.0 - R[i]); p *= np[i];
public MetricScorerFactory() { map.put("MAP", new APScorer()); map.put("NDCG", new NDCGScorer()); map.put("DCG", new DCGScorer()); map.put("P", new PrecisionScorer()); map.put("RR", new ReciprocalRankScorer()); map.put("BEST", new BestAtKScorer()); map.put("ERR", new ERRScorer()); }
R[i] = R(labels[i]); np[i] = p * (1.0 - R[i]); p *= np[i];
public MetricScorerFactory() { map.put("MAP", new APScorer()); map.put("NDCG", new NDCGScorer()); map.put("DCG", new DCGScorer()); map.put("P", new PrecisionScorer()); map.put("RR", new ReciprocalRankScorer()); map.put("BEST", new BestAtKScorer()); map.put("ERR", new ERRScorer()); } public MetricScorer createScorer(METRIC metric)