2021大三机器学习之交叉验证课程基础总结

交叉验证主要就是处理一个问题:在我们训练数据、评估数据的时候,我们该采取什么样的形式,最不好的情况就是直接抽取样本前百分之几作为训练,后百分之几作为评估,这样子的话最终的结果有偶然性,不够准确!我们会认为每次抽取数据(不管是训练数据还是评估的数据)都是随机抽取的,这样子话最终的结果的可信度才足以服众,那么这就是交叉验证的原因

在这里插入图片描述


在这里插入图片描述
如果说按照最原始的分法,全部数据就只被用了一次而已,没有得到充分的使用!并且这样子直接的分法得到的最终的结果也存在着很大的偶然性!那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。

准备数据

交叉验证——K折叠

这个工具是帮助我们选择一个适合的模型的一个工具
交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题。
导入的方式:
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: 样本标签
cv: 交叉验证折数或可迭代的次数(不写的话默认是5)
还记得前面讲过的train_test吗,train_test得到的是0维结果,表示一个评估,是基础。而cross_val_score得到的是1维结果,表示多次划分的评估。

随机置换 Shuffle & Split

头文件:from sklearn.model_selection import ShuffleSplit
shufflesplit迭代器将产生一个用户定义的独立训练/检验集,首先shuffle样本,然后分到训练集和检验集。通过设置伪随机数生成器random_state,控制随机性使结果可重复。
ShuffleSplit()随机排列交叉验证,生成一个用户给定数量的独立的训练/测试数据划分。
简单来说,ShuffleSplit()就是打乱顺序
参数表示:
class sklearn.model_selection.ShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None)

  • n_splits:划分训练集、测试集的次数,默认为10
  • test_size: 测试集比例或样本数量
  • random_state:随机种子值,默认为None,可以通过设定明确的random_state,使得伪随机生成器的结果可以重复。

learning_curse学习曲线

头文件:from sklearn.model_selection import learning_curve
学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。
学习曲线返回的是 train_sizes, train_scores, test_scores
简单解释:
如果说现在有400个数据,我想知道在300个数据的时候,测试评估的结果是怎么样的,或者在数据只有200个的时候,评测评估结果是怎么样的。对于不同大小的训练集,确定交叉验证训练和测试的分数。一个交叉验证发生器将整个数据集分割k次,分割成训练集和测试集。不同大小的训练集的子集将会被用来训练评估器并且对于每一个大小的训练子集都会产生一个分数,然后测试集的分数也会计算。然后,对于每一个训练子集,运行k次之后的所有这些分数将会被平均。

总结

一次性划分train_test得到的是0维结果,表示一个评估,是基础。

cross_val_score得到的是1维结果,表示多次划分的评估。

learning_curve得到的是2维结果,表示多种训练集大小、多次划分的评估。

结合for循环得到多种模型、多种训练集大小、多次划分的评估,是3维结果。

Guess you like

Origin blog.csdn.net/Xmumu_/article/details/120964527