• 哈尔滨工业大学计算机学院-模式识别-课程总结-实验考试


    我来填坑了,最近好忙,没有时间写博客,今天上午刚刚进行完本课程的实验考试,在这里进行简要汇总。

    任务介绍

    • 利用20000条手写识别数据,提前训练好分类器,考试时只需要跑预测模型即可。
    • 本质上一个分类问题,类别总数是10。
    • 本任务比较有意思的一点是,老师提供的训练数据,是利用PCA与LDA降维得到的特征,而不是MNIST集原始的RGB特征。因此如果采用深度学习的方法,不适合使用CNN再次抽取特征。

    我的模型

    • 本实验主要采用ensemble学习的方式,对多个分类器进行集成,其中包括单模型成绩很好的SVM,KNN, MLP,也有单模型效果较弱的随机森林,GBDT模型。
    • 在进行集成学习之前,对于每一个单模型,均采用十折交叉验证的方式进行训练,并且使用Stacking融合策略,将每一折验证集拼接,构成新一轮的训练集特征。交叉验证得到了10个不同的单模型,用这些模型分别对测试集进行预测,最后对预测的概率取平均,得到了新一轮的测试集特征。
    • 每个单模型生成的数据特征维度为10维(因为一共有10个类别),之后将每个单模型对应的特征向量进行拼接,得到了5x10维的特征(因为一共有5个单模型),最用使用xgboost分类器进行集成学习,预测每个类别的概率值。

    训练方式

    • 从训练集中分出一部分数据作为验证集,用该验证集指导模型进行收敛,并记录下来模型达到最优情况时的迭代次数。
    • 之后不划分验证集,用全体训练集进行模型训练,达到之前记录的迭代次数时,停止训练。
    • 之所以采用这种方式,是因为我希望使用更多的数据进行训练,比较适用于训练集数目较小的情况。

    实验结果

    • 我在线下的最高得分有0.98325,但是今天进行实验考试的时候,成绩只有0.97885。我后来自己思考了一下,应该在Stacking融合阶段,我只是将训练集按照8:2划分验证集,Stacking会导致验证集泄漏,使得得分虚高,正确的做法应该是8:1:1这种划分方式,切分出测试集,并以测试集的分数作为模型真实的得分。如果只是在xgboost阶段划分验证集,有两个问题:
      1. 此验证集在前面一层stacking中参与了训练过程,容易造成过拟合。
      2. 验证集应该和测试集的处理过程保持一致。而测试集是十折模型相加取平均的,验证集只是某一折模型的预测结果,不公平,没有指导价值。
    • 不过无所谓了,虽然模型过拟合了,但是最后的成绩好像是小组第二。

    后记

    • 因为数据的特征已经是抽取后的特征,所以不适合用CNN再做分类器,不过可以采用多层前向残差网络设计模型。这种模型还是很简单的,调参功底极大影响最终的成绩。
  • 相关阅读:
    Kubernetes Python Client 初体验之安装授权
    用Ubuntu和树莓派系统部署kubernetes集群后的一些心得
    OpenWrt下基于OLSR的Ad-Hoc组网实现网络摄像头多节点访问
    KVM初体验之virt-manager unable to connect to libvirt的处理办法
    oracle参数和日志文件
    trigger
    package
    function
    procedure
    oracle异常处理
  • 原文地址:https://www.cnblogs.com/szxspark/p/9979833.html
Copyright © 2020-2023  润新知