cross_val_score 和 KFold 的区别

difference between cross_val_score and KFold

我正在学习机器学习,我有这个疑问。谁能告诉我有什么区别:-

from sklearn.model_selection import cross_val_score

from sklearn.model_selection import KFold

我认为两者都用于 k 折交叉验证,但我不确定为什么要为同一功能使用两个不同的代码。 如果有什么我想念的,请告诉我。 (如果可能,请说明这两种方法的区别)

谢谢,

  • cross_val_score 是一个评估数据和 returns 分数的函数。

  • 另一方面,KFold 是一个 class,可让您将数据拆分为 K 倍。

所以,这些是完全不同的。你可以制作 K 折数据并将其用于交叉验证,如下所示:

# create a splitter object
kfold = KFold(n_splits = 10)       
# define your model (any model)
model = XGBRegressor(**params)     
# pass your model and KFold object to cross_val_score
# to fit and get the mse of each fold of data
cv_score = cross_val_score(model,
                           X, y, 
                           cv=kfold, 
                           scoring='neg_root_mean_squared_error')
print(cv_score.mean(), cv_score.std())
  • cross_val_score 使用交叉验证评估分数,方法是将训练集随机分成不同的子集,称为 folds,然后它在折叠上训练和评估模型,每次选择不同的折叠进行评估,然后在其他折叠上进行训练。

    cv_score = cross_val_score(model, data, target, scoring, cv)

  • KFold 过程将有限的数据集分成 k non-overlapping 折。 k 折中的每一个都有机会用作 held-back 测试集,而所有其他折一起用作训练数据集。在 k hold-out 个测试集上拟合并评估了总共 k 个模型,并报告了平均性能。

    cv = KFold(n_splits=10, random_state=1, shuffle=True)

    cv_score = cross_val_score(model, data, target, scoring, cv=cv)

其中 model 是您要评估的模型, data是训练数据, target是目标变量, scoring 参数控制应用于估算器的指标,cv 是拆分数。