如何按账户拆分训练数据和测试数据(一个变量)

How to split training data and testing data by account(one variable)

我正在尝试拟合逻辑回归。我想按帐户拆分训练和测试数据(一个对拟合不起作用的变量)。我希望它们按帐户拆分,每个帐户都可以有很多变量。例如,80% 的帐户将用于培训,20% 的帐户将用于测试。

我试过以下方法,但这段代码只随机给我 80% 的训练和 20% 的测试。然后在训练数据中,它会给我一些说明,但在测试数据中,它也会给我准确说明的不同变量。这不是我想要的。

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

请指教。谢谢!

这个呢

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% 的帐户放入测试数据中,而其余部分将放入训练数据中。