Diff of /deepdta-toy/emetrics.py [000000] .. [8af014]

Switch to side-by-side view

--- a
+++ b/deepdta-toy/emetrics.py
@@ -0,0 +1,81 @@
+import numpy as np
+
+
+def get_aupr(Y, P):
+    if hasattr(Y, 'A'): Y = Y.A
+    if hasattr(P, 'A'): P = P.A
+    Y = np.where(Y>0, 1, 0)
+    Y = Y.ravel()
+    P = P.ravel()
+    f = open("temp.txt", 'w')
+    for i in range(Y.shape[0]):
+        f.write("%f %d\n" %(P[i], Y[i]))
+    f.close()
+    f = open("foo.txt", 'w')
+    subprocess.call(["java", "-jar", "auc.jar", "temp.txt", "list"], stdout=f)
+    f.close()
+    f = open("foo.txt")
+    lines = f.readlines()
+    aucpr = float(lines[-2].split()[-1])
+    f.close()
+    return aucpr
+
+
+
+def get_cindex(Y, P):
+    summ = 0
+    pair = 0
+    
+    for i in range(1, len(Y)):
+        for j in range(0, i):
+            if i is not j:
+                if(Y[i] > Y[j]):
+                    pair +=1
+                    summ +=  1* (P[i] > P[j]) + 0.5 * (P[i] == P[j])
+        
+            
+    if pair is not 0:
+        return summ/pair
+    else:
+        return 0
+
+
+def r_squared_error(y_obs,y_pred):
+    y_obs = np.array(y_obs)
+    y_pred = np.array(y_pred)
+    y_obs_mean = [np.mean(y_obs) for y in y_obs]
+    y_pred_mean = [np.mean(y_pred) for y in y_pred]
+
+    mult = sum((y_pred - y_pred_mean) * (y_obs - y_obs_mean))
+    mult = mult * mult
+
+    y_obs_sq = sum((y_obs - y_obs_mean)*(y_obs - y_obs_mean))
+    y_pred_sq = sum((y_pred - y_pred_mean) * (y_pred - y_pred_mean) )
+
+    return mult / float(y_obs_sq * y_pred_sq)
+
+
+def get_k(y_obs,y_pred):
+    y_obs = np.array(y_obs)
+    y_pred = np.array(y_pred)
+
+    return sum(y_obs*y_pred) / float(sum(y_pred*y_pred))
+
+
+def squared_error_zero(y_obs,y_pred):
+    k = get_k(y_obs,y_pred)
+
+    y_obs = np.array(y_obs)
+    y_pred = np.array(y_pred)
+    y_obs_mean = [np.mean(y_obs) for y in y_obs]
+    upp = sum((y_obs - (k*y_pred)) * (y_obs - (k* y_pred)))
+    down= sum((y_obs - y_obs_mean)*(y_obs - y_obs_mean))
+
+    return 1 - (upp / float(down))
+
+
+def get_rm2(ys_orig,ys_line):
+    r2 = r_squared_error(ys_orig, ys_line)
+    r02 = squared_error_zero(ys_orig, ys_line)
+
+    return r2 * (1 - np.sqrt(np.absolute((r2*r2)-(r02*r02))))
\ No newline at end of file