import matplotlib.pyplot as plt
samples = [{"lab": 1, "p": 0.85},
{"lab": 1, "p": 0.75},
{"lab": 1, "p": 0.7},
{"lab": 0, "p": 0.6},
{"lab": 0, "p": 0.4},
{"lab": 1, "p": 0.3},
{"lab": 0, "p": 0.2}]
PR = []
ROC = []
for sample in samples:
TP = 0
FN = 0
FP = 0
TN = 0
for sample_test in samples:
if sample_test["p"] >= sample["p"]:
if sample_test["lab"] == 1:
TP += 1
else:
FP += 1
else:
if sample_test["lab"] == 1:
FN += 1
else:
TN += 1
P = TP/(TP + FP)
R = TP/(TP + FN)
FPR = FP/(TN + FP)
TPR = TP/(TP + FN)
PR.append({"R": R, "P": P})
ROC.append({"FPR": FPR, "TPR": TPR})
def plt_PR(PR):
PRs = sorted(PR, key=lambda PR: PR["R"])
Ps = []
Rs = []
for PR in PRs:
Ps.append(PR["P"])
Rs.append(PR["R"])
fig = plt.figure()
ax = fig.add_subplot()
ax.plot(Rs, Ps)
plt.show()
def plt_ROC(ROC):
ROC = sorted(ROC, key=lambda ROC: ROC["FPR"])
FPR = []
TPR = []
for PR in ROC:
FPR.append(PR["FPR"])
TPR.append(PR["TPR"])
fig = plt.figure()
ax = fig.add_subplot()
ax.plot(FPR, TPR)
plt.show()
plt_PR(PR)
plt_ROC(ROC)