Извлечение индекса образцов TP и FP при оценке AUC в python? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть проблема с классификацией, которую я реализовал с помощью алгоритма Gradin Boosting для очень несбалансированных данных. Поскольку данные несбалансированы, мы запускаем приведенный ниже код для расчета значения AUC для оценки эффективности классификации.

      mymodel= GradientBoostingClassifier.fit(X_train, y_train)
      y_test=my_validation['target']
      X_test=my_validation.drop(['target'],axis=1)


      y_true=np.array(y_test).copy()
      y_true=y_true.astype(int)
      y_score=mymodel.predict_proba(X_test)[:,1]

      # Compute ROC curve and ROC area for each class
      fpr = dict()
      tpr = dict()
      roc_auc = dict()

      fpr, tpr, thresholds = roc_curve(y_true, y_score)
      roc_auc = auc(fpr, tpr)


      plt.figure()
      lw = 2


      plt.plot(fpr, tpr, color='red',lw=lw,label=r'%1s (AUC%0.2f)'   
              % (m_classifier_name,roc_auc) )
      plt.plot([0, 1], [0, 1], color='navy', 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('ROC_AUC Value: %1s'%myLabel)
      plt.legend(loc="lower right")
      plt.show() 

Этот код дает мне значение auc 62%, что как-то хорошо, так как у нас есть очень несбалансированные данные в наборе обучения и проверки. Итак, мой вопрос: возможно ли извлечь индекс из тех выборок, которые в этом коде предсказаны как TP и PF?

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете использовать функцию прогнозирования в сочетании с масками, чтобы получить то, что вы хотите.Это может выглядеть примерно так:

# Get the positives depending on the threshold you chose
threshold = x
preds_proba = GB.predict_proba(df_test[x])
predictions_ex = [1 if x[1]>threshold else 0 for x in preds_proba]


# We retrieve the indexes of the predicted positive values 
test_pos = [i for i, x in enumerate(predictions_ex) if x == 1]
# We get the indexes of positives 
test_true_pos = y_test[y_test == 0].index

# We can now compute the number of FP and TP
true_positives = [x for x in index_pos if x in index_true_pos]
false_postives = [x for x in index_pos if x not in index_true_pos]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...