zoukankan      html  css  js  c++  java
  • 训练测试样本划分

    在离线建模环节,需要对模型进行评估,这就需要对总样本进行划分,一部分用于训练,模型从训练集学习规则,一部分用于测试,检验模型的泛化能力。

    下面介绍几种样本划分方法。

    留出法

    方法:将样本集 D 分成两个互斥的样本集合,训练集为S,测试集为T,S∩T=Ø,SUT=D

    这种方法非常简单,但不能充分利用数据训练模型,而且样本划分对模型效果影响很大。

    a. 只利用了部分数据训练模型,得到的模型很可能和全量数据D得到的模型偏差很大,训练集越小,偏差越大

    b. 如果训练集较大,测试集较小,则模型可信度降低

    c. 划分前后数据分布不同,比如总样本1500正1500负,划分后,测试样本50正950负,这显然会影响模型的效果。

    样本集划分数量会导致模型偏差,通常做法是 2/3做训练集,1/3做测试集;

    类别分布不同也会影响模型效果,可采用分层抽样的方法,特别是类别不均衡问题;

    鉴于留出法的不确定性,可进行多次留出法实验,最终取平均值

    适用场景:样本具有明显的时间序列因素

    如 6月需要训练模型,可拿1-4月作为训练集,5月作为测试集    

    交叉验证

    这是最常用的方法,老生常谈了,直接贴图片吧

    交叉验证明显比留出法更复杂,

    当k=2时,其仍不同于留出法,因为留出法是1个训练集,而交叉验证是2个训练集;

    当k=n,n为样本数,此时测试集为一个样本,这称为留一法,(Leave-One-Out,LOO)

      // 这种方法训练n个模型,每个模型基本用到全部数据,接近“真实”模型;

      // 但是n很大时,其计算量太大;故n不能太大

    另外,

    交叉验证在处理类别不均衡问题时,也采用了分层采样的方式,即对每个类进行 k折划分;

    由于交叉验证在划分时也带有随机性,可能产生不稳定现象,故可进行多次交叉验证;

    自助法

    自助法(bootstrapping) 以自主采样(bootstrap sampling)为基础,采用有放回重复抽样的方式构建训练集、测试集。

    比如D中有m个样本,每次从中随机拿一个,存入训练集,然后放回D中,下次再从D中随机拿一个,存入训练集...最终产生m个样本的训练集

    当然训练集中可能有重复的样本,有些样本被多次选中,也有些样本从未被选中,没被选中的作为测试集

    样本在m次采样中从未被选中的概率为  (1-1/m)m,取极限

    也就是说测试集大概占总样本的0.368,大概1/3,

    这种测试结果,称为“包外估计

    自助法在数据集较小,且难以有效划分训练/测试时很有用,而且自助法能从数据集中产生多个训练集,很适合集成学习,随机森林用的就是自助法;

    自助法产生的训练集改变了数据分布,这会引入估计偏差;

    所以在数据量足够时,优先选择 留出法和交叉验证。

    最后需要注意一点,尽管我们在模型训练时用的部分样本,但是当经过测试集调试,模型参数固定时,需要重新在整个数据集上训练该模型,这个模型才是最终需要交付的模型。【请注意】

  • 相关阅读:
    Java中Timer的用法
    Java ThreadFactory接口用法
    ThreadPoolExecutor使用介绍
    linux命令学习-4-lsof
    备份文件-域名+日期扫描
    Trickbot展示新技巧:密码抓取器模块
    Trickbot增加的远程应用程序凭证抓取功能
    基于ATT和CK™框架的开放式方法评估网络安全产品
    调试键盘纪录类型的样本
    LordPE修复从进程dump出来的内存文件
  • 原文地址:https://www.cnblogs.com/yanshw/p/11008828.html
Copyright © 2011-2022 走看看