解决ROC曲线画出来只有一个点的问题
之前在做kaggle比赛时,有个比赛使用AUC来评比的,当时试着画了ROC曲线,结果出来的下图这样的图形。跟平时的ROC曲线差好远,就只有一个点。而别人家的都是很多转折的,为啥我的不一样。
我的图如下:
正常的图(sklearn上面截取的):
思考过后,发现原来:
ROC曲线,一般适用于你的分类器输出一个“概率值”,即这个样本属于某个类的概率是多少。如此的话,你就需要设定一个阈值,大于这个阈值属于正类,小于这个阈值属于负类。
从而,对于这个阈值P0,就会得到对应的TPR,FPR,也就是ROC曲线上的一个点,你设置不同的阈值,就会得到不同的TPR,FPR,从而构成ROC曲线。
通常来说阈值降低,即进入正类的门槛变低,TPR会变大,但是FPR也会变大,看他们谁变的快。
之前画线的时候直接用了分类的预测值,而没有用上概率这玩意,被划分为正类的概率。。修改下程序,求多一个概率就能画出正确的图形啦。
如果你用GDBT算法的时候:
gbc=GradientBoostingClassifier() gbc.fit(x_train,y_train) resu=gbc.predict(x_test)#进行预测 y_pred_gbc=gbc.predict_proba(x_test)[:,1]###这玩意就是预测概率的 fpr,tpr,threshold=roc_curve(y_test,y_pred_gbc)###画图的时候要用预测的概率,而不是你的预测的值 plt.plot(fpr,tpr,'b',label='AUC=%0.2f'%rocauc)#生成ROC曲线 plt.legend(loc='lowerright') plt.plot([0,1],[0,1],'r--') plt.xlim([0,1]) plt.ylim([0,1]) plt.ylabel('真正率') plt.xlabel('假正率') plt.show()
以上这篇解决ROC曲线画出来只有一个点的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。