Python的数据分析中交叉验证

【小白从小学Python、C、Java】

【Python全国计算机等级考试】

【Python数据分析考试必会题】

● 标题与摘要

Python的数据分析中

交叉验证

● 选择题

以下说法错误的是:

A 交叉验证可以更好地评估模型的泛化能力

B 10折交叉验证将进行10次训练与测试

C K折交叉验证只进行一次训练与测试

D 交叉验证结果取平均值,减少结果片面的问题

● 问题解析

1.在评估模型结果时,容易因为数据集划分不合理而影响评分结果,从而导致单次评分结果可信度不高。所以需要使用不同的划分多评估几次,然后计算所有评分的平均值,这是比较有效的方法,称作交叉验证。

交叉验证(Cross Validation)会反复对数据集进行划分,并使用不同的划分对模型进行评分,减少单独测试结果过于片面以及训练数据不足的问题,可以更好地评估模型的泛化能力。

2.K折交叉验证过程:

(1)将已知类别的样本随机地划分为大小大致相等的k个子集S1,…,Sk,并进行k次训练与测试。第i次子集Si作为测试数据集,其余子集的并集作为训练数据集。进行k次训练得到k个分类模型,当利用分类模型对测试样本或者新样本进行分类时,综合考虑k个分类模型的分类结果。

(2)举例10折交叉验证:

将已知类别的样本随机地划分为大小大致相等的10个子集,并进行10次训练与测试。分别取1至10为测试集,其余子集的并集作为训练数据集。之后将测试结果取平均值,详见图1。

3.交叉验证语法:

sklearn.model_selection.cross_val_score(estimator,X,y=None,*,groups=None,scoring=None,cv=None,n_jobs=None,verbose=0,fit_params=None,pre_dispatch='2*n_jobs',error_score=nan)

参数解释:

(1)estimator用来指定要评估的模型。

(2)X和y分别用来指定数据集及其对应的标签。

(3)groups默认为None,将数据集拆分为训练集、测试集时使用的样本的分组标签。

(4)scoring默认为None。

(5)cv用来指定划分策略,常设置为整数,表示把数据集拆分成几个部分对模型进行训练和评分。cv=None时,使用默认的5折交叉验证。

(6)n_jobs默认None,并行运行的作业数。

(7)verbose默认为0。

(8)fit_params默认None,传递给估计器的fit方法的参数。

(9)pre_dispatch默认='2*n_jobs',控制在并行执行期间分派的作业数。

(10)error_score默认=np.nan,如果在估计器拟合中发生错误,则分配给分数的值。

4.使用Python自带的糖尿病数据集进行简单的3折交叉验证,分别输出三次模型结果,如图2所示。

● 附图 

图1 10折交叉验证

Python的数据分析中交叉验证_第1张图片

图2 糖尿病数据集进行3折交叉验证

Python的数据分析中交叉验证_第2张图片

● 附图代码

#导入数据集、线性模型

from sklearn import datasets, linear_model

#导入交叉验证模块

from sklearn.model_selection import cross_val_score

#下载Python自带的糖尿病数据集

diabetes = datasets.load_diabetes()

#取出前150条数据

X = diabetes.data[:150]

y = diabetes.target[:150]

lasso = linear_model.Lasso()

#使用线性模型做3折交叉验证

#分别输出三次结果

print(cross_val_score(lasso, X, y, cv=3))

● 正确答案

C

欢迎大家转发,一起传播知识和正能量,帮助到更多人。期待大家提出宝贵改进建议,互相交流,收获更大。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址),刘经纬老师共享知识相关文件下载地址为:http://liujingwei.cn

你可能感兴趣的:(python,数据分析,机器学习)