首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中活性化合物与诱饵的ROC曲线-它是否正确生成?

python中活性化合物与诱饵的ROC曲线-它是否正确生成?
EN

Stack Overflow用户
提问于 2021-03-17 18:43:07
回答 1查看 176关注 0票数 1

我在这方面是新手,但我想为活性化合物与诱饵的一个小数据集绘制一条ROC曲线。我基于这个链接:ROC curve for binary classification in python在这种情况下,这个小数据集是一个虚拟筛选的结果,它从实验数据(IC50)中对具有已知活性或不活性的化合物进行排名和评分。

我不确定图和AUC是否正确。我注意到,即使测试(真)预测值之间只有一个值的差异,AUC也只有0.5。对于我在下面插入的代码中的真实值和预测值,它只有0.49左右。也许模型没有正确地识别这些化合物。然而,我注意到,除了一些其他位置的化合物外,它还正确地识别了排名中的前十个化合物。也许它比消极的更好地识别活性化合物,或者可能是因为有更多的活性化合物需要考虑。此外,对测试值和预测值使用另一种分类系统是不是更好,而不是二进制分类?例如,考虑到每个化合物的等级之间的相似性(对于IC50和虚拟筛选),将IC50值从最好到最差进行排序,并与虚拟筛选排名进行比较,为真实和预测结果创建得分?

考虑到活性化合物和诱饵数量之间的数据不平衡,我还考虑了做一条精确回忆曲线。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-20 01:24:49

绘制ROC曲线所需的代码非常相似,但比您的代码更简单。没有必要将fpr和tpr存储为字典,它们是数组。我认为问题是您的预测是绝对正确/错误的,而不是一个可以用于使用roc_curve函数生成阈值的概率。我将pred值更改为概率值(> 0.5表示True,< 0.5表示False),曲线现在看起来更接近您的预期。此外,只有66%的预测是正确的,这使得曲线相对接近于“无歧视”线(概率为50%的随机事件)。

代码语言:javascript
复制
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 = [0.91,0.87,0.9,0.75,0.85,0.97,0.99,0.98,0.66,0.97,0.98,0.57,0.89,0.62,0.93,0.97,0.55,0.99,0.11,0.84,0.45,0.35,0.3,0.39]

fpr, tpr, _ = roc_curve(test, pred)
roc_auc = auc(fpr, tpr)

print(roc_auc_score(test, pred))
plt.figure()
plt.plot(fpr, tpr)
plt.plot([0.0, 1.0], [0.0, 1.0], ls='--', lw=0.3, c='k')
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()

现在AUC值为0.5842105263157894。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66671449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档