Как разделить тренировочные данные и данные тестирования по аккаунту - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь соответствовать логистической регрессии.Я хочу разделить данные обучения и тестирования по аккаунту (переменная, которая не играет роли в подгонке).Я хочу, чтобы они были разделены на учетные записи, и каждая учетная запись может иметь много переменных.Например, 80% аккаунта будут обучать, 20% аккаунта будут тестировать.

Я пробовал следующее, но этот код просто дает мне 80% обучения и 20% тестирования в случайном порядке.Затем в обучающих данных, это даст мне некоторую учетную запись, но в тестировании данных, это также даст мне именно эту учетную запись только с различными переменными.Это не то, что я хочу.

X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.20, random_state = 0)

Пожалуйста, сообщите.Спасибо!

1 Ответ

0 голосов
/ 28 мая 2019

Как насчет этого

import numpy as np

def group_train_test_split(X, y, test_size, random_state, stratify):
    X = X.copy()
    X['_target'] = y

    X = X.set_index(stratify)
    index = X.index

    index_values = index.unique().values
    np.random.seed(random_state)
    np.random.shuffle(index_values)

    cut = np.round(index_values.shape[0] * test_size).astype('<i4')

    X_test, X_train = X.loc[index_values[:cut]], X.loc[index_values[cut:]]

    return X_test['_target'], X_train['_target'], X_test.drop('_target', axis=1), X_train.drop('_target', axis=1)

y_test, y_train, X_test, X_train = group_train_test_split(X=X, y=y, test_size=0.2, random_state=41, stratify='account')

Таким образом, 20% учетных записей будут перенесены в тестовые данные, а остальные будут в обучающие данные.

...