我们是否向 cross_val_score 提供训练数据或整个数据?使用 cross_val_score 时我很困惑。我知道我们将数据划分为训练和测试,并为我们的模型提供训练数据。
这是 sckit-learn 文档中的示例,使用整个数据。
cross_val_score(model, iris.data, iris.target,scoring=scorer, cv=5)
cross_val_score 用于以比典型的训练-测试分割更稳健的方式估计模型的准确性。您应该将所有数据输入其中,它将进行必要的训练-测试分割。
如果您需要交叉验证超参数,那么您应该运行嵌套交叉验证,使用一个外循环来估计模型的准确性,使用一个内循环来获取最佳参数,从而将外循环的训练集分割为训练集和验证集。程序应该是这样的:
Outer loop:
Split train - test
Inner loop:
Fix parameters
Split train in train2 - validation
Train with train2 set
Score with validation set
Repeat Inner loop for all parameters
Train with train set and best parameters from inner loop
Score with test
Repeat outer loop until CV ends
Return test scores
幸运的是,sklearn 允许将 GridSearchCV 嵌套在 cross_val_score 中。
validation = GridSearchCV(estimator, param_grid)
score = cross_val_score(validation, X, y)
您传递整个训练数据,
sklearn
将根据cv
参数对其进行分割。
输出将来自每次迭代时自动创建的测试部分。