我正在尝试拟合逻辑回归。我想按帐户划分训练和测试数据(该变量在拟合中不起作用)。我希望它们按帐户划分,每个帐户可以有很多变量。例如,80%的帐户将接受培训,20%的帐户将接受测试。
我已经尝试了以下方法,但是这段代码只给了我80%的训练和20%的随机测试。然后,在训练数据中,它会给我一些帮助,但是在测试数据中,它也将给我确切地说明只是具有不同的变量。那不是我想要的。
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.20,random_state = 0)
请告知。谢谢!
答案 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%的帐户纳入测试数据,而其余的将在培训数据中。