INNER CODE UNIT · Go
ndcg
orneryd/NornicDB · cmd/eval/main.go:366
func ndcg(returned []string, grades map[string]int, k int) float64 {
// Simplified NDCG
if len(grades) == 0 {
return 0.0
}
limit := min(k, len(returned))
dcg := 0.0
for i := 0; i < limit; i++ {
grade := float64(grades[returned[i]])
dcg += grade / (1.0 + float64(i))
}
// Ideal DCG (perfect ranking)
idcg := 0.0
for i := 0; i < min(k, len(grades)); i++ {
idcg += 1.0 / (1.0 + float64(i))
}
if idcg == 0 {
return 0.0