happy_tong1 2022-04-13 15:57 采纳率: 100%
浏览 97
已结题

ROC曲线画出来混乱线

问题遇到的现象和发生背景

今天在做建模分析的时候,用到随机森林处理多分类问题,最后画出的ROC曲线很奇怪,想知道这是什么原因造成的。

问题相关代码
import numpy as np
from sklearn.metrics import multilabel_confusion_matrix
from sklearn.metrics import classification_report,roc_auc_score

pred_y_quant = rf.predict_proba(Xtest)
con = multilabel_confusion_matrix(Ytest,rf.predict(Xtest),labels=[1.0,2.0,3.0,4.0,5.0])
print(classification_report(Ytest,rf.predict(Xtest),labels=[1.0,2.0,3.0,4.0,5.0]))
# macro avg       0.52      0.40      0.42      4646 weighted avg       0.71      0.72      0.70      4646
#AUC
AUC = roc_auc_score(np.array(Ytest),np.array(pred_y_quant),multi_class='ovo')
print('AUC:',auc)
pred_y_score = []
for i in pred_y_quant:
    pred_y_score.append(max(i))
#ROC
plt.figure()
lw = 2
plt.plot(np.array(Ytest),np.array(pred_y_score),color='darkorange',
         lw=lw,label = 'randomforest')
plt.plot(color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 5.0])
#plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
运行结果及报错内容

img

我想要达到的结果

画出正确的ROC曲线

展开全部

  • 写回答

2条回答 默认 最新

  • cndrip 2022-04-14 11:05
    关注

    我感觉你写得不对,以下代码供你参考

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as  plt
    from sklearn.metrics import multilabel_confusion_matrix
    from sklearn.metrics import classification_report,roc_auc_score
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.datasets import make_blobs
    
    from sklearn import svm
    
    #使用最初的X和y,样本不均衡的这个模型
    class_1 = 500 #类别1有500个样本
    class_2 = 50 #类别2只有50个
    centers = [[0.0, 0.0], [2.0, 2.0]] #设定两个类别的中心
    clusters_std = [1.5, 0.5] #设定两个类别的方差,通常来说,样本量比较大的类别会更加松散
    X, y = make_blobs(n_samples=[class_1, class_2],
                      centers=centers,
                      cluster_std=clusters_std,
                      random_state=0, shuffle=False)
    
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap="rainbow",s=10)
    
    
    clf_proba = RandomForestClassifier(n_estimators = 8).fit(X,y)
    y_predict = clf_proba.predict(X)
    ypredict = clf_proba.predict_proba(X)
    
    from sklearn.metrics import roc_curve
    FPR, recall, thresholds = roc_curve(y,ypredict[:,1], pos_label=1)
    
    
    from sklearn.metrics import roc_auc_score as AUC
    area = AUC(y,ypredict[:,1])
    print(area)
    
    from sklearn.metrics import confusion_matrix
    cm= confusion_matrix(y, y_predict)
    print(cm)
    
    plt.figure()
    plt.plot(FPR, recall, color='red',
             label='ROC curve (area = %0.4f)' % area)
    plt.plot([0, 1], [0, 1], color='black', linestyle='--')
    plt.xlim([-0.05, 1.05])
    plt.ylim([-0.05, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('Recall')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    happy_tong1 2022-04-15 12:47

    感谢你的解答。我知道我代码有点不对,也没有找到哪里错了,最近挺忙的,代码一直搁置着。我很好奇是什么原因导致ROC曲线直接变成混乱的直线,等我到时候懂了,再来回复你。

    回复
    happy_tong1 回复 happy_tong1 2022-04-17 14:24

    解决问题了,我这个是多分类情况,我直接把五种fpr,tpr混在一起画了,所以出现了这种情况。

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月17日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 为什么树莓派5b显示禁止连接
  • ¥20 流量太费!寻找便宜的app音视频SDK或平替方案。
  • ¥15 kubeasz部署遇到问题
  • ¥15 GUIDE to App Designer Migration Tool for MATLAB
  • ¥50 第三代非支配排序遗传算法(NSGA-Ⅲ)和多目标粒子群优化算法(MOPSO)的实现
  • ¥20 plant simulation与python com接口实时数据交互
  • ¥15 有关汽车的MC9S12XS128单片机实验
  • ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
  • ¥15 FLKT界面刷新异常
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
手机看
程序员都在用的中文IT技术交流社区

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

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

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

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

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

客服 返回
顶部