数据集划分-交叉验证(CV)

数据集划分-交叉验证(CV)

通过将原始数据分为3个数据集合,我们就大大减少了可用于模型学习的样本数量, 并
且得到的结果依赖于集合对(训练,验证)的随机选择。这个问题可以通过 交叉验证(CV ) 来解决。 交叉验证仍需要测试集做最后的模型评估,但不再需要验证集。

最基本的方法:k-折交叉验证 。
k-折交叉验证将训练集划分为 k 个较小的集合(其他方法会在下面描述,主要原则基本相同)。 每一个 k 折都会遵循下面的过程:

  • 将 k-1 份训练集子集作为 training data (训练集)训练模型,
  • 将剩余的 1 份训练集子集作为验证集用于模型验证(也就是利用该数据集计算模型的性能指标,例如准确率)。

k-折交叉验证得出的性能指标是循环计算中每个值的平均值。 该方法虽然计算代价很高,但是它不会浪费太多的数据(如固定任意测试集的情况一样), 在处理样本数据集较少的问题(例如,逆向推理)时比较有优势。
数据集划分-交叉验证(CV)_第1张图片

sklearn.model_selection.cross_val_score

sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=’warn’, n_jobs=None, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’)

参数:

**estimator(估计器)?*实现 fit 的估算器对象,也就是我们的机器学习算法的模型
**X,**类似于数组
y, 类似数组,可选,默认值:无
cv : int,交叉验证生成器或可迭代的,可选的,

  • 无,使用默认的3倍交叉验证,
  • 整数,用于指定a中的折叠数(Stratified)KFold,

返回:

scores :每次交叉验证运行的估算器分数数组。

Examples

>>>
>>> from sklearn import datasets, linear_model
>>> from sklearn.model_selection import cross_val_score
>>> diabetes = datasets.load_diabetes()
>>> X = diabetes.data[:150]
>>> y = diabetes.target[:150]
>>> lasso = linear_model.Lasso()
>>> print(cross_val_score(lasso, X, y, cv=3))  
[0.33150734 0.08022311 0.03531764]

你可能感兴趣的:(机器学习)