Advertisement
Guest User

Untitled

a guest
Aug 28th, 2015
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import sys
  4. import json
  5. import operator
  6. import math
  7.  
  8. true_path = 'true_recoms.txt'
  9. team_path = 'recoms.txt'
  10.  
  11. result = { 'score': 0, 'details': 'failed' }
  12.  
  13. true_recs = {}
  14.  
  15. with open(true_path) as f:
  16. for line in f:
  17. data = json.loads(line)
  18. true_recs[data['item']] = data['true_recoms']
  19.  
  20. ndcg_sum = 0
  21. lines_number = 0
  22.  
  23. with open(team_path) as f:
  24. for line in f:
  25. data = json.loads(line)
  26. lines_number += 1
  27.  
  28. trs = true_recs[data['item']]
  29. tmrs = data['recoms']
  30.  
  31. sorted_trs = sorted(trs.items(), key = operator.itemgetter(1), reverse = True)
  32. sorted_tmrs = sorted(tmrs.items(), key = operator.itemgetter(1), reverse = True)
  33.  
  34. dcg = 0
  35. idcg = 0
  36.  
  37. for i in range(len(trs)):
  38. delta = sorted_trs[i][1]
  39. if i + 1 != 1:
  40. delta = delta / float(math.log(i + 1, 2))
  41. idcg += delta
  42.  
  43. for i in range(len(tmrs)):
  44. if sorted_tmrs[i][0] in trs:
  45. delta = trs[sorted_tmrs[i][0]]
  46. if i + 1 != 1:
  47. delta = delta / float(math.log(i + 1, 2))
  48. dcg += delta
  49.  
  50. ndcg_sum += dcg / idcg
  51.  
  52. if lines_number != len(true_recs.keys()):
  53. result['details'] = 'Wrong lines number'
  54. else:
  55. result['details'] = 'ok'
  56. result['score'] = ndcg_sum / lines_number
  57.  
  58.  
  59. print repr(result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement