我有一些标记为0或1的数据,我尝试使用随机林来预测这些类。每个实例都标记有20个用于训练随机林的特性(约30.000个训练实例和约6000个测试实例)。在
我正在使用以下代码绘制精度召回和ROC曲线:
precision, recall, _ = precision_recall_curve(y_test, y_pred)
plt.step(recall, precision, color='b', alpha=0.2,where='post')
plt.fill_between(recall, precision, step='post', alpha=0.2, color='b')
fpr, tpr, _ = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
到目前为止,我看到的所有PR和ROC曲线在精确度/召回率方面总是有参差不齐的/平滑的下降,而ROC曲线的平滑/参差不齐的增加。但我的PR和ROC曲线总是这样的:
由于某些原因,它们只有一个改变方向的点。这是由于我的编码错误还是数据/分类问题固有的原因?如果是这样,如何解释这种行为?在
在
precision_recall_curve
内,y_pred
必须是目标类的probabilities
,而不是实际的预测类。在因为您使用的是
RandomForestClassifier
,所以使用predict_proba(X)来获得概率。在我怀疑你用了RandomForestClassifier.predict()方法,根据预测的类生成0或1。在
要得到概率,即为特定类投票的树的分数,必须使用RandomForestClassifier.predict_proba()方法。在
使用这些概率作为曲线计算的输入应该可以解决这个问题。在
编辑:scikit learn的曲线生成方法首先根据预测得分对预测结果进行排序,然后根据实际值/观察值对预测值进行排序,因此曲线具有这些“弯折”。在
相关问题 更多 >
编程相关推荐