#!/usr/bin/python import numpy as np import os import sys import pickle import math prun = 0 runs = {} labels = {} users = pickle.load((open(sys.argv[3]))) recs = map(lambda x:0,users) conf = {} thresh = 0.0 top_users = np.loadtxt(sys.argv[4])[-5:,1] for line in open(sys.argv[1]): line = line.split(',') try: run = int(line[3]) except: continue user = line[1] if run not in labels: #runs[run] = 0 labels[run] = users.index(user) + 1 for line in open(sys.argv[2]): line = line.split(',') run = int(line[3]) user = line[1] if users.index(user)+1 in top_users: i = 6 while i < len(line)-1: pred_user = ' '.join(line[i].split('@')[0].split('_')) if users.index(pred_user)+1 in top_users: conf[run] = float(line[i+1])/100 runs[run] = users.index(pred_user)+1 break i += 2 for i in range(999)+list(np.arange(999,1000,0.01)): thresh = i/1000.0 t=0.0 tp=0.0 fp=0.0 fn=0.0 for (k,v) in runs.items(): #print v,labels[k] if conf[k] < thresh: fn += 1 elif v != labels[k]: fp += 1 else: tp += 1 t += 1 #print runs[167],labels[167] #print tp,fp,fn #print("Precision: ",tp/(tp+fp)) #print("False positives: ",fp/(tp+fp)) #print("Recall: ",1.0-fn/t) try: print str(1.0-fn/t)+","+str(tp/(tp+fp)) except: print "0,1"