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

时间:2019-05-28 17:24:43

标签: python split logistic-regression

我正在尝试拟合逻辑回归。我想按帐户划分训练和测试数据(该变量在拟合中不起作用)。我希望它们按帐户划分,每个帐户可以有很多变量。例如,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 :(得分: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%的帐户纳入测试数据,而其余的将在培训数据中。