patrick_112 2021-05-18 09:07 采纳率: 0%
浏览 2304

五折交叉验证下的平均ROC曲线绘制

#data为数据集,利用KF.split划分训练集和测试集
for train_index,test_index in KF.split(data):
    #建立模型,并对训练集进行测试,求出预测得分
    #划分训练集和测试集
    X_train,X_test = data[train_index],data[test_index]
    Y_train,Y_test = label[train_index],label[test_index]
    #建立模型(模型已经定义)
    model = build_model()
    #编译模型
    model.compile(optimizer = 'sgd',loss = 'categorical_crossentropy',metrics = ['acc'])
    #训练模型
    model.fit(X_train,Y_train,batch_size = 2,validation_data = (X_test,Y_test),epochs = 150)
    #利用model.predict获取测试集的预测值
    y_pred = model.predict(X_test,batch_size = 1)
    #计算fpr(假阳性率),tpr(真阳性率),thresholds(阈值)[绘制ROC曲线要用到这几个值]
    fpr,tpr,thresholds=roc_curve(Y_test[:,1],y_pred[:,1])
    #interp:插值 把结果添加到tprs列表中 
    tprs.append(interp(mean_fpr,fpr,tpr))
    tprs[-1][0]=0.0
    #计算auc
    roc_auc=auc(fpr,tpr)
    aucs.append(roc_auc)
    #画图,只需要plt.plot(fpr,tpr),变量roc_auc只是记录auc的值,通过auc()函数计算出来
    plt.plot(fpr,tpr,lw=1,alpha=0.3,label='ROC fold %d(area=%0.2f)'% (i,roc_auc))
    i +=1
#画对角线
plt.plot([0,1],[0,1],linestyle='--',lw=2,color='r',label='Luck',alpha=.8)
mean_tpr=np.mean(tprs,axis=0)
mean_tpr[-1]=1.0
mean_auc=auc(mean_fpr,mean_tpr)#计算平均AUC值
std_auc=np.std(tprs,axis=0)
plt.plot(mean_fpr,mean_tpr,color='b',label=r'Mean ROC (area=%0.2f)'%mean_auc,lw=2,alpha=.8)
std_tpr=np.std(tprs,axis=0)
tprs_upper=np.minimum(mean_tpr+std_tpr,1)
tprs_lower=np.maximum(mean_tpr-std_tpr,0)
plt.fill_between(mean_tpr,tprs_lower,tprs_upper,color='gray',alpha=.2)
plt.xlim([-0.05,1.05])
plt.ylim([-0.05,1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC')
plt.legend(loc='lower right')
plt.show()

 代码是在CSDN上看到的某博主写的,在绘制交叉验证的平均ROC曲线时采用将五折的fpr和tpr求平均以获得最终tpr和fpr,这么做有依据吗?以前前面部分求插值的操作,是在有点看不懂,有大神帮忙讲解下嘛?

代码来源:https://blog.csdn.net/DoReAGON/article/details/89290691

 

展开全部

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 10:56
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论
    编辑
    预览

    报告相同问题?

    悬赏问题

    • ¥15 两道题,用python写出代码
    • ¥15 charles打开Windows Proxy代理后电脑网络无法使用
    • ¥15 该怎么把前导 0 去掉存储给点思路
    • ¥15 智能循迹小车的红外模块无法给单片机输出信号或者是单片机无法输入信号,如何解决?(语言-c语言)
    • ¥15 slopBed分析过程中 genomesize中染色体命名与样本的sample_FE.bdg中的染色体命名方式不一致如何解决
    • ¥15 llama.cpp项目中为什么超过上下文窗口就报错
    • ¥15 基于stc89c52单片机的延时小夜灯
    • ¥15 VQAV2现在都是怎么做evaluation的啊
    • ¥20 C#添加、更新MYSQL数据库问题
    • ¥15 ambari部署hadoop集群中的问题
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部