【发布时间】:2021-06-14 16:39:58
【问题描述】:
我是这方面的新手,但我想为一小部分活性化合物与诱饵数据集绘制 ROC 曲线。我基于此链接:ROC curve for binary classification in python 在这种情况下,这个小数据集是虚拟筛选的结果,该筛选对实验数据中已知活性或非活性的化合物进行排序和评分 (IC50)。
我不确定情节和 AUC 是否正确。我注意到即使测试(真实)预测值之间只有一个值差异,AUC 也只有 0.5。对于我在下面插入的代码中的真实值和预测值,它仅为 0.49 左右。也许模型没有正确识别化合物。但是,我注意到对于排名中的前十个化合物,除了其他位置的一些化合物外,它还正确识别。也许它比阴性化合物更好地识别活性化合物,或者可能是因为有更多的活性化合物需要考虑。此外,对于测试值和预测值使用另一个分类系统会更好,而不是二进制分类?例如,将IC50值从最佳到最差排序并与虚拟筛选等级进行比较,为真实结果和预测结果创建分数,同时考虑每个化合物等级之间的相似性(IC50和虚拟筛选)?
考虑到活性化合物和诱饵数量之间的数据不平衡,我还考虑过绘制精确召回曲线。
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc, roc_auc_score
test = [1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,1,1,1]
pred = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0]
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(2):
fpr[i], tpr[i], _ = roc_curve(test, pred)
roc_auc[i] = auc(fpr[i], tpr[i])
print(roc_auc_score(test, pred))
plt.figure()
plt.plot(fpr[1], tpr[1])
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.show()
【问题讨论】:
-
你的问题到底是什么?
-
我不知道代码是否正确生成了ROC曲线,或者是否有更好的编码方式。
-
那么请编辑您的问题以反映这一点。目前,它看起来更像是对您的数据的咆哮,而不是一个问题。
-
我在标题中添加了主要问题——我在第二段开头提到的问题。也许不清楚,因为我没有包括问号,就像同一段中的其他两个问题一样。这可能看起来像是咆哮,因为我想在包含更多关于问题/担忧的情况的详细信息(观察/想法)中。
标签: python matplotlib roc docking chemistry