如何解决ROC曲线画出来只有一个点的问题
本文讲解"怎么解决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='lower right') plt.plot([0, 1], [0, 1], 'r--') plt.xlim([0, 1]) plt.ylim([0, 1]) plt.ylabel('真正率') plt.xlabel('假正率') plt.show()
关于 "怎么解决ROC曲线画出来只有一个点的问题" 就介绍到此。希望多多支持编程宝库。
使用wxpy怎么自动发送微信消息:本文讲解"使用wxpy如何自动发送微信消息",用于解决相关问题。思路整理:1、进入心灵鸡汤网页,使用python获取心灵鸡汤内容 2、登陆微信,找到需要发送的朋友 3、发送获取的内容实现如下 ...