我有一个大的数据集,它被划分为三个块(训练-验证-测试)。我想要执行交叉验证( CV ),因为我有一个大的数据集,它将花费太长的时间来执行整个数据集的简历。什么是正确的分区来执行简历?我看过一些教程,它们只使用训练分割,而其他只使用验证分割,而其他则使用整个数据集。
感谢您的任何澄清或帮助。
发布于 2018-09-25 09:20:09
为了简化事情,让我们假设您只有一个超参数。如果您想要进行交叉验证,您将选择N不同的超参数值,并在训练集上训练N不同的模型。然后,您将选择在验证集上性能最好的超级参数。然后,使用所选的超参数使用培训和验证集对模型进行再培训。然后在测试集上评估模型性能。
如果您的数据集很大,您可以选择一个小的子集,找到最优的超参数,然后继续增加子集,直到您可以推断出在整个数据集大小下最优的超参数是什么。在实践中,您通常可以选择尽可能大的子集,您可能会感到烦恼,只需为该子集使用最佳的超参数即可。
编辑:
如果您使用scikit-learn,下面是假设的带有超参数model的C的伪代码
from sklearn.model_selection import GridSearchCV
# X_train, X_test are the train and test features
# Y_train, Y_test are the corresponding labels/values to predict.
# model is some scikit-learn regression or classification model
# Create a parameter grid
param_grid = {'C': [0.1, 1, 5, 15, 100]}
# Do two fold CV. You can do other types of CV as well by passing
# a cross-validation generator
estimator = GridSearchCV(model, cv=2, param_grid=param_grid)
# Do the cross validation procedure explained below
estimator.fit(X_train, Y_train)当您运行fit方法时,您会将您的训练集(X_train, Y_train)分成两部分。然后使用C=0.1使用数据的前半部分对模型进行培训,并在下半场对模型的性能进行评分。在这种情况下,前半部分是训练集,下半部分是验证集。之后,您将重复该过程,但使用后半部分作为培训集,使用前半部分作为验证集。然后对性能进行平均和存储。
然后,对C的其余值重复此过程。然后检查C的哪个值给出了最佳的预测精度。然后使用该值使用整个培训集(X_train, Y_train)来训练最终模型。然后,可以在左侧测试集上评估模型的性能。
score = estimator.score(X_test, Y_test)https://stackoverflow.com/questions/52493677
复制相似问题