训练集和测试集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了训练集和测试集相关的知识,希望对你有一定的参考价值。

参考技术A

train set 用来训练模型,估计参数

test set 用来测试和评估训练出来的模型好坏,不能用于训练模型

我们将所有数据分成训练集和测试集两部分,我们用训练集进行模型训练,得到的模型再用测试集来衡量模型的预测表现能力

将数据随机分成训练集和测试集

将训练集中的一部分作为 验证集,训练集其余部分训练完模型后,用验证集验证模型的好坏

最先我们用全部数据进行训练和测试的 accuracy_score ,来衡量模型的表现,

但是这种方法

有的人采取题海战术,把每道题都背下来。但是题目稍微一遍,就不会做了。因为他记住了每道题复杂解法但是没有抽象出通用的规则。有的人采取题海战术,把每道题都背下来。但是题目稍微一遍,就不会做了。因为他记住了每道题复杂解法但是没有抽象出通用的规则。

Error反映的是整个模型的准确度(好坏),

Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,

Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。

打个比方:

一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:一是瞄准出了问题,比如实际上射击瞄准的是9环而不是10环;二是枪本身的稳定性有问题,虽然瞄准的是9环,但是只打到了7环。那么在上面一次射击实验中,Bias就是1,反应的是模型期望与真实目标的差距,而在这次试验中,由于Variance所带来的误差就是2,即虽然瞄准的是9环,但由于本身模型缺乏稳定性,造成了实际结果与模型期望之间的差距。

[图片上传失败...(image-3427b-1563778769660)]

目标

Error( test ) 最小

但是我们建模时不能对 测试集 进行任何操作。

步骤

1.Error( train ) 尽可能小

2.Error( train ) 尽可能等于 Error( test )

这样 Error( test ) 最小

进一步说:

Error( train ) 尽可能小

Error( train ) 尽可能等于 Error( test )

矛盾

模型想减少 bias 就需要用更多的参数,想减少 Variance 就需要更少的参数

解决办法

考虑到,模型误差是偏差与方差的加和,有图像

[图片上传失败...(image-c0a74a-1563778769660)

图中的最优位置,实际上是 total error 曲线的拐点。

我们知道,连续函数的拐点意味着此处一阶导数的值为 0。考虑到 total error 是偏差与方差的加和,

在拐点处:

若模型复杂度大于平衡点,则模型的方差会偏高,模型倾向于过拟合;

若模型复杂度小于平衡点,则模型的偏差会偏高,模型倾向于过拟合

当观察到 ​ 很大时,可能处在途中蓝色圆圈中的两个位置,虽然观察到的现象很相似​都很大),但这两个位置的状态是非常不同的,处理方法也完全不同。

这里指的是为了避免模型过拟合,人为添加的噪声

过拟合

模型为训练集的数据妥协的太厉害,忽略了未使用的数据的特点。导致虽然模型在训练集里表现的很好,在对新的数据估计时表现不好。泛化能力差

解决办法

获得更多数据

在数据在输入中加入高斯噪声(正态分布)

生成结果里每一行是一个list。输入矩阵比如[0,1] 类似与上面的[a,b]。多项式输出矩阵是[1,a,b,a 2,ab,b2]。所以就是下面对应的[1,0,1,0,0,1]。现在将interaction_only=True。这时就是只找交互作用的多项式输出矩阵。例如[a,b]的多项式交互式输出[1,a,b,ab]。不存在自己与自己交互的情况如;a 2或者a*b2之类的。

传入的训练集和 测试集

方法:

专门生成多项式特征

列出参数网格对应的所有参数排列组合

返回选择结果表格。

cv_results_

通过Grid Search选择的分数最高的参数

best_params_

通过Grid Search选择的估计器,即分数最高(或如果指定的最小损失)的估计器。

best_estimator_

属性:

根据 数据集 X,Y 运行Grid Search。

fit ( X , y)

方法:

GridSearchCV方法,自动对输入的参数进行排列组合,并一一测试,从中选出最优的一组参数。

按照某种形状重组矩阵,原有数据不变

numpy.reshape( a , newshape )

返回沿轴的最大值的索引。

交叉验证模型分数

在无监督学习中,数据集的特征是不知道的,没有任何训练样本。

监督学习 的特点是训练集已给出,通过已有的训练样本(即已知数据以及对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价标准下是最佳的),再利用这个模型将所有的输入映射为相应的输出,从而实现分类的目的,也就是有了对未知数据进行分类的能力.

监督学习其实就是我们对输入样本经过模型训练后有明确的预期输出,非监督学习就是我们对输入样本经过模型训练后得到什么输出完全没有预期。

返回 num 个符合期望值为 loc , 标准差为 scale 的正态分布随机数。

简化下,忽略随机误差(其实随机误差很重要)

所以 Error误差 是由随机误差,预测模型与真实模型的误差以及预测模型本身的变异三部分组成的。

等式右边依次是Irreducible Error, Bias^2 和 Variance。

其中,Y是真实值,Y 由 Y = f + e产生, f-hat是预测值 。

[图片上传失败...(image-d7cac4-1563778769660)]

使用平方误差函数表示 Error 的计算

最后提下 noise

TUT 里讨论的应该是评估模型好坏的语境下的Bias(偏差)和 Variance,这就要再提 Error

3.最后根据测试集,用调整好 Hype参数的那一个模型,评估模型表现

2.经过 Hype 参数调整的每种模型用训练集的交叉验证通过比较平均 accuracy_score ,选择哪种模型最适合这批数据

1.对于每种模型,用训练集的交叉验证通过比较平均 accuracy_score 选择合适的 Hype 参数

过程:

要确定

如果我们需要对一组数据建立模型,

可以交叉验证估计该模型的 hype 参数的最佳值。

一些模型中的某个参数在模型训练前就要被设置:

就是把样本集S分成k份,分别使用其中的(k-1)份作为训练集,剩下的1份作为交叉验证集,最后取最后的平均误差,来评估这个模型。

将数据集进行一系列分割,生成一组不同的训练测试集,然后分别训练模型并计算测试 accuracy_score ,最后对结果进行平均处理。这样来有效降低测试 accuracy_score 的差异。

Holdout 方法往往因为验证集太小而效果不佳,即验证集数据太少无法完全显示数据的原貌

用全部数据进行训练和测试的 accuracy_score 分析导致数据过拟合以及测试集缺少独立性。

这里不同的训练集、验证集分割的方法导致其准确率不同。

2.模型复杂,但是样本量不足。(对的,样本数足够就不用着 CV 了)

1.训练集和测试集特征分布不一样

过拟合有两种可能:

以上是关于训练集和测试集的主要内容,如果未能解决你的问题,请参考以下文章

训练集、验证集和测试集

训练集,验证集,测试集的作用

验证集与测试集有啥区别?为啥要分训练集、验证集和测试集?

随机切分csv训练集和测试集

Alink漫谈 : 如何划分训练数据集和测试数据集

CountVectorizer 是不是应该同时适用于训练集和测试集?