Это нормально / приемлемо для кривой ROC иметь значения, которые пересекают линию отношения 1 к 1? - PullRequest
1 голос
/ 10 октября 2019

Я строю кривую рабочей характеристики приемника (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).

Главное, что я хотел бы знать, это то, выглядит ли график приемлемым. Если нет, то что-то не так с моим кодом?

...