机器学习:cross_val_score的用法

631 阅读4分钟

0/参考网址

blog.csdn.net/weixin_4221… blog.csdn.net/weixin_4221…

1/什么是交叉验证?作用是什么?

<1>什么是交叉验证

交叉验证,就是把原始的数据集,拆分成不同的部分,可以拆成2部分,也可以拆成多部分。
然后有的部分用来进行训练模型,有的部分用来验证模型的效果。

交叉验证主要有3种:
   <1>简单的交叉验证
   <2>k折交叉验证(k-fold交叉验证)
   <3>自助法

<2>交叉验证的作用

既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题

2/简单的交叉验证

图片.png

将原始数据集**随机**划分成训练集和验证集两部分。
比如说,将样本按照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次求得的分类率的平均值,作为该模型或者假设函数的真实分类率

图片.png

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: 交叉验证最重要的就是他的验证方式,选择不同的评价方法,会产生不同的评价结果。
          该参数一定要有。

111.png

从上面的图片可知道,有分类,聚类,回归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: 如果在估计器拟合中发生错误,要分配给该分数的值(一般不需要指定)

6/cross_val_score()的具体使用demo