2

我在我的代码中使用了 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 的分数,但是当我删除第一行并更改第 2 行和第 3 行中“数据”集的“火车”集时,分数变为 0.2,这很奇怪,因为我什至设置了 test_size为 0,因此火车应该等于整个数据。发生了什么?

4

1 回答 1

1

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

默认情况下shuffle=True,它可以很容易地通过打乱它在您的训练数据中添加一些噪音,其中只需将数据传入而不打乱我将一些其他模式引入模型中。

于 2019-04-30T17:32:31.320 回答