Постройте кривую ROC для набора прогнозов одного класса

#python #machine-learning #deep-learning #time-series #roc

Вопрос:

Я построил нейронную сеть для обнаружения аномалий во временном ряду, содержащем все значения аномалий. Это означает, что y_test представляет собой массив со всеми 1 внутри него. Поскольку нейронная сеть классифицировала все это правильно, у меня также есть набор предсказаний со всеми 1 (очевидно, он имеет ту же форму, что и y_test). Когда я пытаюсь создать сюжет ROC, я получаю предупреждение:

/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/метрики/_ranking.py:941: Неопределенное предупреждение: В y_true нет отрицательных выборок, ложноположительное значение должно быть бессмысленным предупреждением.предупреждение(«В y_true нет отрицательных выборок»,

Это мой код:

 import matplotlib.pyplot as plt
import sklearn.metrics as metrics

y_test = [1, 1, 1, 1, 1, 1, 1, 1]
preds = [1, 1, 1, 1, 1, 1, 1, 1]
fpr, tpr, threshold = metrics.roc_curve(y_test, preds)
roc_auc = metrics.auc(fpr, tpr)
plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
 

Результирующий график пуст:
введите описание изображения здесь

Как я могу это решить?

Комментарии:

1. Не знаю, как ответить на ваш вопрос, но вам понадобится несколько нормальных точек (0) для построения кривой roc. А также для обучения вашей модели. В противном случае он может классифицировать все как аномалию (1), что не особенно полезно…

2. Хотя это не решает вашу проблему, для roc_curve функции следует указывать вероятности в качестве второго параметра, а не прогнозируемые классы.