for(int i=0;i<rel.size();i++) r[i] = rel.get(i); double ideal = getIdealDCG(r, size); idealGains.put(lastQID, ideal); rel.clear(); for(int i=0;i<rel.size();i++) r[i] = rel.get(i); double ideal = getIdealDCG(r, size); idealGains.put(lastQID, ideal); rel.clear();
r[i] = rel.get(i); final double ideal = getIdealDCG(r, size); idealGains.put(lastQID, ideal); rel.clear(); r[i] = rel.get(i); final double ideal = getIdealDCG(r, size); idealGains.put(lastQID, ideal); rel.clear();
/** * Compute NDCG 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) { if(rl.size() == 0) return 0; int size = k; if(k > rl.size() || k <= 0) size = rl.size(); int[] rel = getRelevanceLabels(rl); double ideal = 0; Double d = idealGains.get(rl.getID()); if(d != null) ideal = d; else { ideal = getIdealDCG(rel, size); idealGains.put(rl.getID(), ideal); } if(ideal <= 0.0)//I mean precisely "=" return 0.0; return getDCG(rel, size)/ideal; } public double[][] swapChange(RankList rl)
/** * Compute NDCG 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) { if (rl.size() == 0) { return 0; } int size = k; if (k > rl.size() || k <= 0) { size = rl.size(); } final int[] rel = getRelevanceLabels(rl); double ideal = 0; final Double d = idealGains.get(rl.getID()); if (d != null) { ideal = d; } else { ideal = getIdealDCG(rel, size); idealGains.put(rl.getID(), ideal); } if (ideal <= 0.0) { return 0.0; } return getDCG(rel, size) / ideal; }
@Override public double[][] swapChange(final RankList rl) { final int size = (rl.size() > k) ? k : rl.size(); //compute the ideal ndcg final int[] rel = getRelevanceLabels(rl); double ideal = 0; final Double d = idealGains.get(rl.getID()); if (d != null) { ideal = d; } else { ideal = getIdealDCG(rel, size); //idealGains.put(rl.getID(), ideal);//DO *NOT* do caching here. It's not thread-safe. } final double[][] changes = new double[rl.size()][]; for (int i = 0; i < rl.size(); i++) { changes[i] = new double[rl.size()]; Arrays.fill(changes[i], 0); } for (int i = 0; i < size; i++) { for (int j = i + 1; j < rl.size(); j++) { if (ideal > 0) { changes[j][i] = changes[i][j] = (discount(i) - discount(j)) * (gain(rel[i]) - gain(rel[j])) / ideal; } } } return changes; }
public double[][] swapChange(RankList rl) { int size = (rl.size() > k) ? k : rl.size(); //compute the ideal ndcg int[] rel = getRelevanceLabels(rl); double ideal = 0; Double d = idealGains.get(rl.getID()); if(d != null) ideal = d; else { ideal = getIdealDCG(rel, size); //idealGains.put(rl.getID(), ideal);//DO *NOT* do caching here. It's not thread-safe. } double[][] changes = new double[rl.size()][]; for(int i=0;i<rl.size();i++) { changes[i] = new double[rl.size()]; Arrays.fill(changes[i], 0); } for(int i=0;i<size;i++) for(int j=i+1;j<rl.size();j++) if(ideal > 0) changes[j][i] = changes[i][j] = (discount(i) - discount(j)) * (gain(rel[i]) - gain(rel[j])) / ideal; return changes; } public String name()