Идеальная кривая ROC, но неидеальная точность прогноза

Я строю кривые ROC для нескольких классификаторов и озадачен, обнаружив, что классификатор случайных лесов выводит идеальную кривую ROC (см. Ниже), когда я получаю только оценку точности 85% для класса 0 и 41% для класса 1. (класс 1 - положительное значение). введите здесь описание изображения

Фактические значения y равны y = [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 1. 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. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 0. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 0. 1. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 1. 0. 0. 1. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 1. 0. 1. 0. 1. 1. 0. 1. 0. 1. 1. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 0. 0. 1. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 1.]

и прогнозируемые значения y = [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0 . 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 1. 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. 0. 0. . 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 0. 1. 1. 0. 1. 1. 1. 1. 1. 1 . 1. 0. 1. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 1. 1 . 0. 0. 0. 0. 1. 0. 0. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 1. 0. 1. 0. 1. 1. 0. 1 . 0. 1. 1. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 0. 0. 1. 0. 0 . 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 0. 1. 0 . 0. 0. 0. 1. 0. 0. 1. 1.]

Прогнозируемые вероятности равны = [0. 0.2 0. 0. 0. 0.2 0.1 0.4 0.2 0.9 0.9 0.4 0.9 0.2 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,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()

person yogz123    schedule 19.01.2017    source источник
comment
Как вы рассчитываете точность? См. stackoverflow.com/questions/39145083/ для того же вопроса   -  person Calimo    schedule 19.01.2017
comment
Я использую встроенную функцию оценки, которая вычисляет среднюю точность. Re: ваш ответ на другой пост, мое понимание кривой ROC заключается в том, что это график производительности классификатора при изменении его порога. Верно ли, что кривая ROC будет идеальной, пока существует одно пороговое значение с идеальной классификацией?   -  person yogz123    schedule 19.01.2017
comment
Да ты прав.   -  person PhilippPro    schedule 02.02.2017


Ответы (1)


Вы приближаетесь к идеальному баллу ROC-AUC, потому что рассчитываете ROC-AUC на тренировочном наборе. Вам нужно провести оценку на тестовом наборе.

person Achal Dixit    schedule 12.11.2020