绘制平滑的ROC曲线
绘制平滑ROC曲线主要有两个要点:
1.点要少(点多了,即便excel绘制出来也很不好看,凹凸交替)
2.要进行插值(我这里尝试了2次插值和excel绘制的roc curve十分接近了)
3.平滑曲线是怎么来的?本质也是大量点的连接,众多极小段的"直"连接起来就变成了"曲",所以得到插值函数后,生成等间隔几百个点x,得到y,然后直接plot
我实现的方法:
1.点少,我直接是按score来找4个分位点(20% 40% 60% 80%),加上(0,0)和(1,1)一共是6个点
2.插值用的from scipy.interpolate import interp1d
3.插值函数有些情况算出来,可能会出现newy > 1的情况,这个时候的处理办法是去掉newy > 1的点,然后y轴上限稍微设置大点,如1.01(因为线有一定宽度,1的话视觉效果并不好)
最后说一些发现的细节:
1.sklearn的 fpr,tpr,threshold = roc_curve(y,socre)这个会返回很多阈值对应的fpr,tpr,逻辑不明,感觉50到100个阈值,里面可能会存在一对多的情况(一x对应多个y,一个y对应多个x),可以先按x去重,再按y去重画图,我发现这个时候画出来的图就与sns.lineplot(ci=None)十分接近,说明sns.lineplot自身做了去重,但是lineplot画图还是直接plot,散点连接起来
最后说一些发现的细节:
1.sklearn的 fpr,tpr,threshold = roc_curve(y,socre)这个会返回很多阈值对应的fpr,tpr,逻辑不明,感觉50到100个阈值,里面可能会存在一对多的情况(一x对应多个y,一个y对应多个x),可以先按x去重,再按y去重画图,我发现这个时候画出来的图就与sns.lineplot(ci=None)十分接近,说明sns.lineplot自身做了去重,但是lineplot画图还是直接plot,散点连接起来
留言
張貼留言