我正在学习机器学习,我有这个疑问。谁能告诉我这两者的区别:-
from sklearn.model_selection import cross_val_score
和
from sklearn.model_selection import KFold
我认为两者都用于k折交叉验证,但我不确定为什么要为相同的功能使用两种不同的代码。如果有什么我错过了,请让我知道。(如果可能,请说明这两种方法的区别)
谢谢,
-
cross_val_score
是一个计算数据并返回分数的函数。 -
另一方面,
KFold
是一个类,它允许您将数据拆分为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通过随机将训练集分成不同的子集(称为折叠),使用交叉验证来评估分数,然后在折叠上训练和评估模型,每次选择一个不同的折叠进行评估,并在其他折叠上进行训练。
cv_score = cross_val_score(model, data, target, scoring, cv)
KFold程序将有限的数据集划分为k个不重叠的折叠。k个折叠中的每一个都有机会被用作保留测试集,而所有其他折叠一起被用作训练数据集。总共k个模型在k个保留测试集上进行拟合和评估,并报告平均性能。
cv = KFold(n_splits=10, random_state=1, shuffle=True)
cv_score = cross_val_score(model, data, target, scoring, cv=cv)
,是你想要评估的模型,是训练数据,是目标变量,得分参数控制应用于估计器的度量和cv是分割的数目。