Функция для определения ROC-балла объекта после случайного перетасовки данных тренировочной цели не действует случайным образом - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь написать функцию, которая будет давать среднюю ROC-оценку 10 классификаторов логистической регрессии, каждый из которых обучается по разной случайной перетасовке целевых данных обучения для одной функции за раз.(с целью сравнения с не перетасованным счетом roc) Но я получаю очень странные и неслучайные результаты для каждого счета roc.

Я попытался использовать np.random.shuffle вместо pd.sample и получил тот же результат

from sklearn import metrics
from sklearn.linear_model import LogisticRegression

def shuffled_roc(df, feature):
    df = df.sample(frac=1, random_state=0)
    x = df[feature][np.isfinite(df[feature])].copy()
    y = df['target'][np.isfinite(df[feature])].copy()

    x_train = x.iloc[:int(0.8*len(x))]
    y_train = y.iloc[:int(0.8*len(x))]

    x_test = x.iloc[int(0.8*len(x)):]
    y_test = y.iloc[int(0.8*len(x)):]

    y_train_shuffled = y_train.sample(frac=1).reset_index(drop=True)

    rocs = []
    for i in range(10):
        y_train_shuffled = y_train_shuffled.sample(frac=1).reset_index(drop=True)
        lr = LogisticRegression(solver = 'lbfgs').fit(x_train.values.reshape(-1,1), y_train_shuffled)

        roc = metrics.roc_auc_score(y_test, lr.predict_proba(x_test.values.reshape(-1,1))[:,1])
        rocs.append(roc)
    print(rocs)
    return np.mean(rocs)
shuffled_roc(df_accident, 'target_suspension_count')

Я ожидаю 10 разных значений для 10 баллов, но вместо этого я получаю

[0.7572317596566523, 0.24276824034334765, 0.24276824034334765, 0.7572317596566523, 0.7572317596566523, 0.7572317596566523, 0.24276824034334765, 0.7572317596566523, 0.7572317596566523, 0.24276824034334765]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...