Почему две разные оценки AUC производятся при оценке по одним и тем же данным и по одному алгоритму - PullRequest
0 голосов
/ 13 июня 2018

Я работаю над проблемой классификации, чья метрика оценки в РПЦ АУК.До сих пор я пытался использовать xgb с другими параметрами.Вот функция, которую я использовал для выборки данных.И вы можете найти соответствующую записную книжку здесь (Google Colab)

def get_data(x_train, y_train, shuffle=False):

  if shuffle:
    total_train = pd.concat([x_train, y_train], axis=1)

    # generate n random number in range(0, len(data))
    n = np.random.randint(0, len(total_train), size=len(total_train))
    x_train = total_train.iloc[n]
    y_train = total_train.iloc[n]['is_pass']
    x_train.drop('is_pass', axis=1, inplace=True)

    # keep the first 1000 rows as test data
    x_test = x_train.iloc[:1000]
    # keep the 1000 to 10000 rows as validation data
    x_valid = x_train.iloc[1000:10000]
    x_train = x_train.iloc[10000:]

    y_test = y_train[:1000]
    y_valid = y_train[1000:10000]
    y_train = y_train.iloc[10000:]

    return x_train, x_valid, x_test, y_train, y_valid, y_test

  else:
    # keep the first 1000 rows as test data
    x_test = x_train.iloc[:1000]
    # keep the 1000 to 10000 rows as validation data
    x_valid = x_train.iloc[1000:10000]
    x_train = x_train.iloc[10000:]

    y_test = y_train[:1000]
    y_valid = y_train[1000:10000]
    y_train = y_train.iloc[10000:]

    return x_train, x_valid, x_test, y_train, y_valid, y_test 

Вот два вывода, которые я получаю после работы с перемешанными и не перемешанными данными

AUC with shuffling:  0.9021756235738453
AUC without shuffling:  0.8025162142685565

Можете ли вы узнать, в чем здесь проблема?

1 Ответ

0 голосов
/ 13 июня 2018

Проблема в том, что в вашей реализации shuffling- np.random.randint генерирует случайные числа, но они могут повторяться, таким образом, у вас есть те же события, которые появляются в вашем поезде и тесте + действительных наборах.Вместо этого вы должны использовать np.random.permutation (и рассмотреть возможность использования np.random.seed для обеспечения воспроизводимости результата).

Еще одно примечание - у вас очень большая разница в производительности между комплектами обучения и проверки / тестирования (обучение показываетпочти идеальный РПЦ АУК).Я полагаю, это связано со слишком большой максимальной глубиной дерева (14), что вы учитываете размер набора данных (~ 60 КБ), который у вас есть в руке

PS Спасибо, что поделились ссылкой для совместной работы - я былне знаю об этом, но это очень полезно.

...