train_test_split 和 test_size=0 如何影响数据?

How is train_test_split with test_size=0 affecting the data?

我在我的代码中使用了 train_test_split,然后想将其更改为交叉验证,但发生了一些奇怪的事情。

train, test = train_test_split(data, test_size=0)

x_train = train.drop('CRO', axis=1)
y_train = train['CRO']

scaler = MinMaxScaler(feature_range=(0, 1))
x_train_scaled = scaler.fit_transform(x_train)
x_train = pd.DataFrame(x_train_scaled)

for k in range(1, 5):
    knn = neighbors.KNeighborsRegressor(n_neighbors=k, weights='uniform')
    scores = model_selection.cross_val_score(knn, x_train, y_train, cv=5)
    print(scores.mean(), 'score for k = ', k)

此代码给出的分数约为 0.8,但是当我删除第一行并将第二行和第三行中的 'data' 集更改为 'train' 集时,分数变为 0.2,这很奇怪,因为我什至将 test_size 设置为 0,所以火车应该等于整个数据。 发生了什么事?

需要注意的一件事是 train_test_split 中传递的隐式参数。

默认情况下,shuffle=True,这很容易通过混洗训练数据来添加一些噪音,其中只是传递数据而不进行混洗我会在模型中引入一些其他模式。