首先,我将数据集拆分为训练和测试,例如:
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=999)
然后我使用GridSearchCV
交叉验证来找到性能最好的模型:
validator = GridSearchCV(estimator=clf, param_grid=param_grid, scoring="accuracy", cv=cv)
通过这样做,我有:
使用 k-1 个折叠作为训练数据来训练模型;生成的模型在数据的剩余部分(scikit-learn.org)上进行验证
但是,当阅读有关 Kerasfit
功能时,该文档又引入了 2 个术语:
validation_split:在 0 和 1 之间浮动。要用作验证数据的训练数据的一部分。该模型将分离这部分训练数据,不会对其进行训练,并将在每个 epoch 结束时评估该数据的损失和任何模型指标。在改组之前,从提供的 x 和 y 数据中的最后一个样本中选择验证数据。
validation_data:元组 (x_val, y_val) 或元组 (x_val, y_val, val_sample_weights) 用于评估每个时期结束时的损失和任何模型指标。模型不会根据这些数据进行训练。validation_data 将覆盖validation_split。
据我了解,validation_split
(被覆盖validation_data
)将用作未更改的验证数据集,同时在每个交叉验证步骤期间的交叉验证更改中设置保留。
- 第一个问题: 是否有必要使用
validation_split
或者validation_data
因为我已经进行了交叉验证? 第二个问题:如果没有必要,那么我应该分别将
validation_split
和设置validation_data
为0和无吗?grid_result = validator.fit(train_images, train_labels, validation_data=None, validation_split=0)
问题 3:如果我这样做了,在训练过程中会发生什么,Keras 会直接忽略验证步骤吗?
问题 4:属于还是,或者它会被视为“测试集”(如 的情况),永远不会用于训练模型。
validation_split
k-1 folds
hold-out fold
cross validation