0/参考网址
blog.csdn.net/weixin_4221… blog.csdn.net/weixin_4221…
1/什么是交叉验证?作用是什么?
<1>什么是交叉验证
交叉验证,就是把原始的数据集,拆分成不同的部分,可以拆成2部分,也可以拆成多部分。
然后有的部分用来进行训练模型,有的部分用来验证模型的效果。
交叉验证主要有3种:
<1>简单的交叉验证
<2>k折交叉验证(k-fold交叉验证)
<3>自助法
<2>交叉验证的作用
既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题
2/简单的交叉验证
将原始数据集**随机**划分成训练集和验证集两部分。
比如说,将样本按照70%~30%的比例分成两部分,70%的样本用于训练模型;30%的样本用于模型验证。
缺点:(1)数据都只被所用了一次,没有被充分利用
(2)在验证集上计算出来的最后的评估指标与原始分组有很大关系。
注:
这样说来,其实简单的交叉验证我们一直都在使用,就是把原始数据集拆分成2部分,一部分训练,一部分验证。
3/k折交叉验证
为了解决简单交叉验证的不足,提出k-fold交叉验证。
1、首先,将全部原始样本集合划分成k个大小相等的样本子集;
2、依次遍历这k个子集,每次把当前子集作为验证集,其余所有样本作为训练集,进行模型的训练和评估;
3、最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k通常取10.
举个例子:这里取k=10,如下图所示:
(1)先将原数据集分成10份
(2)每一将其中的一份作为验证集,剩下的9个(k-1)个作为训练集
此时训练集就变成了k * D(D表示每一份中包含的数据样本数)
(3)最后计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率
4/自主法
自助法是基于自助采样法的检验方法。
对于总数为n的原始样本合集,进行n次`有放回`的随机抽样,得到大小为n的训练集。
n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证。
5/cross_val_score()交叉验证的参数设置
from sklearn.model_selection import 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: 估计器,也就是模型,该参数一定要有
X: 输入样本的特征数据,该参数一定要有
y: 样本的标签数据,该参数一定要有
groups: 将数据集分割为训练/测试集时使用的样本的组标签(一般用不到)
scoring: 交叉验证最重要的就是他的验证方式,选择不同的评价方法,会产生不同的评价结果。
该参数一定要有。
从上面的图片可知道,有分类,聚类,回归3大类。
你需要根据前面传入的estimator参数具体解决的是什么问题,来确定scoring这个参数的值。
cv: 交叉验证折数或可迭代的次数,该参数一定要有
n_jobs: 同时工作的cpu个数(-1代表全部)
verbose: 详细程度
fit_params: 传递给估计器(验证算法)的拟合方法的参数
pre_dispatch: 控制并行执行期间调度的作业数量。
减少这个数量对于避免在CPU发送更多作业时CPU内存消耗的扩大是有用的。
该参数可以是:
(1)没有,在这种情况下,所有的工作立即创建并产生。将其用于轻量级和快速运行的作业,以避免由于按需产生作业而导致延迟
(2)一个int,给出所产生的总工作的确切数量
(3)一个字符串,给出一个表达式作为n_jobs的函数,如’2 * n_jobs
error_score: 如果在估计器拟合中发生错误,要分配给该分数的值(一般不需要指定)