完美的ROC曲线但预测精度不完善

时间:2017-01-19 15:22:37

标签: python random-forest roc

我正在绘制几个分类器的ROC曲线,并且当我只获得0级和41%的准确度得分为85%时,我发现随机森林分类器正在输出完美的ROC曲线(见下文)。对于1级(1级是正值)。 enter image description here

实际的y值是y = [0。0. 0. 0. 0 0. 0 0. 0 1. 1. 1. 0. 0. 0. 0 0. 0。   0. 0-0.1.0.0.0-0.0.1.0-0.0.1.0。   0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0 0. 1。   0. 0-0.0.0.0.0.0-0.0.0.0.0.0.0.0。   1. 0 0. 0 1. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1。   0.1.1.1.1.1.1.1.1.0.1.0.1.1.1.0.1.0。   0. 0.1 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0 0. 0。   1. 0 1. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1。   1. 0. 1. 0. 1. 1. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0 1. 1。   1. 1. 1. 1. 1. 0. 0. 1. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1。   1. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0。   0. 0. 1. 0. 0. 1. 1.。

并且预测的y值= [0. 0. 0. 0. 0 0. 0 0. 0 1. 1. 1. 0. 0. 0. 0 0. 0 0。   0. 0-0.1.0.0.0-0.0.1.0-0.0.1.0。   0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0 0. 0 0. 0 0. 1。   0. 0-0.0.0.0.0.0-0.0.0.0.0.0.0.0。   1. 0 0. 0 0. 0 0. 0 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1。   0.1.1.1.1.1.1.1.1.0.1.0.1.1.1.0.1.0。   0. 0-0.1.0-0.1.0-0.1.0.1.0-0.0.0。   1. 0 1. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1。   1. 0. 1. 0. 1. 1. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0 1. 1。   1. 1. 1. 1. 1. 0. 0. 1. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1。   1. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0。   0. 0. 1. 0. 0. 1. 1.。

预测概率为= [0.2 0.2 0. 0. 0.2 0.1 0.4 0.2 0.9 0.9 0.4 0.4 0.9 0.2 0。   0. 0 0. 0 0. 0.1 0. 0.6 0. 0. 0.1 0. 0.1 0.7 0。   0. 0.1 0. 0.8 0.5 0.8 0. 1. 0.2 0. 0.9 0.9 0. 0 0。   0.7 0.4 0. 0. 0.2 0. 0. 0. 0.6 0.1 0. 0. 0.1 0.2 0。   0. 0.1 0. 0.1 0.1 0. 0.1 0. 0. 0.1 0. 0. 1. 0 0。   0. 0.4 0. 0 0. 0. 1. 0.9 0.9 1. 0.9 1. 0.3 0.9 0.7   0.5 0.8 1. 0.9 0.9 1. 0.7 0.9 0. 0.8 0.2 0.2 0.8 0.9 0.3   0.7 0.3 0.1 0.1 0. 0.5 0.7 0. 0.2 0.1 0.7 0. 0.4 0.9 0.2   1. 0.8 0.1 0.1 0.1 0.3 1. 0.2 0.4 0.8 0.8 0.4 0.8 1. 0.9   0.9 0.8 0.7 1. 1. 0.2 0.7 0. 0.8 0.7 0.2 0.7 0.2 0.8 0.9   0.3 0.3 1. 1. 0.2 0.7 1. 0.3 0.2 0.2 0.1 0.8 0.8 0.9 0.9   1. 0.7 0. 0. 0.7 0.4 0.1 0.2 0.7 0.9 1. 1. 0.6 0.9 0.8   0.9 0.8 0.7 0.3 0. 0.2 1. 0.9 0. 0.1 0.6 0.8 0.1 0.1 0。   0.7 0.1 0.4 0. 0.2 0.6 0.1 0. 0.7 1.]

最后,创建ROC的代码是:

#Lasso
final_logit=LogisticRegression(class_weight='balanced',penalty='l1',C=best_C)
final_logit.fit(x,y)
y_pred_lass=final_logit.predict_proba(x)

fpr_lass, tpr_lass, thresholds = metrics.roc_curve(y, y_pred_lass[:,1], pos_label=1)
roc_auc_lass = auc(fpr_lass, tpr_lass)


#Logistic
wlogit = LogisticRegression(class_weight='balanced')
wlogit.fit(x,y)
y_pred_logit=wlogit.predict_proba(x)


fpr_logit, tpr_logit, thresholds = metrics.roc_curve(y, y_pred_logit[:,1], pos_label=1)
roc_auc_logit = auc(fpr_logit, tpr_logit)

#Random forest
brf = RandomForest(class_weight='balanced')
brf.fit(x,y)
y_pred_brf=brf.predict_proba(x)


fpr_brf, tpr_brf, thresholds = metrics.roc_curve(y, y_pred_brf[:,1], pos_label=1)
roc_auc_brf = auc(fpr_brf, tpr_brf)


plt.figure(figsize=(7,7))
lw = 2
plt.plot(fpr_lass, tpr_lass, color='darkorange',
     lw=lw, label='Lasso (area = %0.2f)' % roc_auc_lass)
plt.plot(fpr_logit, tpr_logit, color='red',
     lw=lw, label='Logistic (area = %0.2f)' % roc_auc_logit)
plt.plot(fpr_brf, tpr_brf, color='green',
     lw=lw, label='Random Forest (area = %0.2f)' % roc_auc_brf)
plt.plot([0, 1], [0, 1], color='black', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

1 个答案:

答案 0 :(得分:0)

由于您要根据训练集计算ROC-AUC,因此您接近完美的ROC-AUC分数。您需要对测试集进行评估。