交叉验证的实现

Posted

技术标签:

【中文标题】交叉验证的实现【英文标题】:Implementation of Cross-validation 【发布时间】:2020-05-30 12:50:28 【问题描述】:

我很困惑,因为许多人都有自己的方法来应用交叉验证。例如,有些人将其应用于整个数据集,有些人将其应用于训练集。

我的问题是以下代码是否适合实现交叉验证并在具有交叉的同时从此类模型进行预测 -验证正在应用?

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import KFold

model= GradientBoostingClassifier(n_estimators= 10,max_depth = 10, random_state = 0)#sepcifying the model
cv = KFold(n_splits=5, shuffle=True)


from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import cross_val_score

#X -the whole dataset
#y - the whole dataset but target attributes only

y_pred = cross_val_predict(model, X, y, cv=cv)
scores = cross_val_score(model, X, y, cv=cv)

【问题讨论】:

【参考方案1】:

need to have a test set 可以评估完全看不见的数据的性能,即使是交叉验证也是如此。不应在此测试集上进行性能调优以避免data leakage

将数据分成训练和测试两部分。 CV 方法有很多种,如 K-Fold、Stratified K-Fold 等。可视化和进一步阅读材料在这里,

https://scikit-learn.org/stable/auto_examples/model_selection/plot_cv_indices.html

https://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

在 K-Fold CV 中,训练数据被拆分为 K sets。然后对于每一折,训练该折中的K-1,其余的用于性能评估。

可以在此处找到有关交叉验证、训练/验证/测试拆分等的图像和更多详细信息。

https://scikit-learn.org/stable/modules/cross_validation.html

3 classes 的 K-Fold 交叉验证可视化,

【讨论】:

感谢您的信息,我已更新问题中的代码。我现在正在使用整个数据集,这是正确的方法吗

以上是关于交叉验证的实现的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证思想

R语言里怎么做十折交叉验证

机器学习交叉验证和网格搜索案例分析

MATLAB 支持向量机 (SVM) 交叉验证实现以提高代码速度

为 CNN 模型实现交叉验证

在 python 中尝试交叉验证时出错