#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
функции следует указывать вероятности в качестве второго параметра, а не прогнозируемые классы.