Нанесение кривой ROC в scikit дает только 3 балла

Функция TL;DR: scikit roc_curve возвращает только 3 балла для определенного набора данных. Почему это возможно, и как мы можем контролировать, сколько очков нужно вернуть?

Я пытаюсь нарисовать кривую ROC, но последовательно получаю "треугольник ROC".

lr = LogisticRegression(multi_class = 'multinomial', solver = 'newton-cg')
y = data['target'].values
X = data[['feature']].values

model = lr.fit(X,y)

# get probabilities for clf
probas_ = model.predict_log_proba(X)

Просто чтобы убедиться, что длина в порядке:

print len(y)
print len(probas_[:, 1])

Возвращает 13759 на обоих.

Затем выполняется:

false_pos_rate, true_pos_rate, thresholds = roc_curve(y, probas_[:, 1])
print false_pos_rate

возвращает [0. 0.28240129 1.]

Если я вызываю threasholds, я получаю массив ([0.4822225, -0.5177775, -0.84595197]) (всегда только 3 балла).

Поэтому неудивительно, что моя кривая ROC выглядит как треугольник.

То, что я не могу понять, - это , почему scikit roc_curve возвращает только 3 пункта.. Помощь очень ценится.

enter image description here

Ответ 1

Количество точек зависит от количества уникальных значений на входе. Поскольку входной вектор имеет только 2 уникальных значения, функция дает правильный результат.

Ответ 2

У меня была такая же проблема с другим примером. Ошибка, которую я сделал, состояла в том, чтобы ввести результаты для заданного порога, а не вероятности в аргументе y_score roc_curve. Это также дает сюжет с тремя точками.