Я строю кривую рабочей характеристики приемника (ROC), но некоторые значения выходят за линию отношения 1 к 1. Я думал, что это невозможно, но сейчас я не уверен, потому что считаю, что мой код правильный.
Я построил кривую ROC и выполнил код.
def perf_measure(exval, thval):
y_true = [0] * len(thval)
y_pred = [0] * len(thval)
for i in range(len(thval)):
if abs(exval[i] - thval[i]) <= 0.5:
y_true[i] = 1
y_pred[i] = 0
elif abs(exval[i] - thval[i]) > 0.5:
y_true[i] = 0
y_pred[i] = 1
X_train, X_test, y_train, y_test = train_test_split(np.array(thval), np.array(y_pred), test_size=0.5, random_state=1)
X_train = np.array(X_train).reshape((len(X_train), 1))
X_test = np.array(X_test).reshape((len(X_test), 1))
lab_enc = preprocessing.LabelEncoder()
y_train = lab_enc.fit_transform(np.array(y_train).astype('int'))
logmodel = LogisticRegression(solver='lbfgs', multi_class='auto')
logmodel.fit(X_train, y_train)
probs = logmodel.predict_proba(X_test)
preds = probs[:,1]
fpr, tpr, th = roc_curve(y_test, preds)
auc = roc_auc_score(y_test, preds)
auc = round(auc, 2)
return(fpr, tpr, auc)
Код должен правильно выводить ROC, разве я что-то напутал? exval это принятые значения. Thval это теоретические значения. Оба вводятся в виде списка размером 1 на лен (thval).
Главное, что я хотел бы знать, это то, выглядит ли график приемлемым. Если нет, то что-то не так с моим кодом?