zoukankan      html  css  js  c++  java
  • 研究生数模竞赛笔记

    研究生数模竞赛笔记

    Tips:

    1. 获奖人数按照参赛人数的百分比;所以要有信心拿个三等奖。
    2. 字不如表,表不如图;把该表达的东西表达清楚的情况下,尽量把图画的酷炫一点。
    3. 页数说明了你们的工作量,至少表达了态度,所以尽量写到40页以上。
    4. 参考文献、很多文字之类的很多都是网上摘抄的再结合一点自己的东西,图一定要自己做;还有代码也没必要提交。
    5. 写代码的时候尽量多建几个文件夹,分类清晰便于看懂,该写的注释得写清楚。
    6. 代码拿来主义——网上有的,就没必要自己写。(所以积累这方面的知识也是有必要的)
    7. 整体思路是要先做完,先有个结果。编也得编个结果出来,没必要创新,这个比赛不是考创新的,把你的想法实现出来,构造一个模型出来,其实这个模型效果的好坏也不重要,重要的是你的想法。
    8. 所以论文的前几页是问题分析以及整体的解决方法。开头的摘要部分写的好,中间部分的图画的好,就已经成功一半了。
    9. 代码做归做,论文写归写。论文就尽量往高了吹,代码能写多少就写多少。
      10.论文要比写代码开展的更早, 有想法了就可以写论文了。论文是理想版的代码,论文树是不受限的。写代码的组员一点一点跟上节奏就行了。总之一句话,代码的作用就是不断丰富论文,为论文增加实验结果,而不是论文来描述代码。

    论文目录结构

    1. 问题重述
    2. 模型假设
    3. 模型符号分析与说明
    4. 问题一 建模与求解
      4.1 问题分析
      4.2 资料选取
      4.3 数据处理
      4.4 利用xx方法研究
      4.5 xx方法分析zzz特征及规律
      4.6 zzz规律模型建立与求解
      4.7 模型评估
    5. 问题二 建模与求解
      5.1 问题分析
      5.2 数据处理
    6. 问题三 建模与求解
    7. 问题四 建模与求解
      7.1 问题分析
      7.2 网络模型及模型建立
      7.3 实例验证及结果分析
    8. 参考文献
    9. 附录

    数模PPT分享

    老师好,各位同学好晚上好。在之前几天我们听了几位老师、学长关于数模竞赛的分享。 也大概了解了一些关于数模竞赛的东西。不知道大家在本科的时候有没有参加过数学建模竞赛,参加过的同学肯定知道其中的流程了,但我猜绝大部分没参加过的同学可能跟我一样虽然听了这么多经验分享,但有一种感觉就是对自己到底要做什么东西还是云里雾里的。目标感不是特别的清晰,懂了,但不完全懂。
    那今晚我就从一个数模小白的角度分享一下我理解的数模竞赛,以及一些数模竞赛中的机器学习算法,那如果有什么说的不对的,请老师指正以及同学间多多交流。

    那下面就从五部分讲,第一部分引出我们的任务,后四部分指出我们分别要做什么。

    第一部分呢是数模竞赛的流程,这张图片是来自董老师之前分享过的PPT,当时听的时候觉得也就这么回事,但当我真正去读去年的赛题的时候,才发现这张图片是干货中的干货。我们真正要做的东西就囊括在了这张图里。
    那以去年的B题辛烷值为例,问题的背景是我们要对汽油进行提纯,但是提纯的过程中会损失辛烷值,那竞赛的终究任务就是 提纯过程中尽可能避免辛烷值的损失。
    为了实现这一终究任务,题B给了我们五个小任务。
    任务一是、任务二是、任务三是、任务四是、任务五是
    文字可能比较抽象,我们通过结合表数值的形式来分析。
    任务一就是对这325行数据的处理,如果某一行的数据异常,那我们可以使用丢掉这一行或者其它处理方式。
    那任务二呢就是对列的处理,除了这一列辛烷值损失外我们可以把其它的列都理解为属性,也可以说特征。我们可以把其理解成辛烷值损失Y是由这么多特征X决定的。那对于每个特征来说,它和其它的特征可能存在相关性,那任务二的目的就是剔除掉这些相关的特征。使其用30个特征就能决定辛烷值损失Y
    任务三呢是预测,给定一行数据,不包括这个辛烷值损失Y,将特征向量X输入到我们的预测模型中,将模型的输出预测值和实际的值比较。
    任务四是主要变量的优化,大家都学过神经网络, 可以把这里主要变量理解成w权重,通过调整任务二得到的主要特征的值,来达到最小化辛烷值损失的目的。
    任务五是主要变量的可视化。

    那讲完上述五个任务后,自然而然就会提出这五个问题,.....
    先看看别人是怎么做的吧,这一队在去年拿了季军.......

    OK,看完别人的东西后,发现其实还是在这个框架下去做,那每个任务对应的方法有哪些呢,这个就是我们参加数模需要研究的东西。

    那我整理一些方法,可能不是特别的完整,但应该都是很经典的。
    针对数据预处理,我们有这些方法........
    除此之外,还可以对数据进行归一化、标准化等,还有可以对需要分类任务的特征使用哑变量的形式。
    针对主要变量的选择,也就是特征工程,我们有两大种类的方式,一大类是降维算法,另一大类是特征选择算法。
    那我们先来看降维算法,降维算法中最出名的是PCA主成分分析算法,那什么是PCA?
    接下来我将会用一个通俗易懂的例子来给大家简单的解释下原理,具体的数学推导感兴趣的同学之后去查一下。
    如图,是一个平面二维坐标上的三个点,我们描述这三个点需要使用(x,y)两个变量,那有什么办法可以使用单独一个x就可以描述这三个点呢,只要把坐标轴旋转一下,让这三个点都落在x轴上就可以了。这时候三个点的坐标就变成了.....
    现在是要把二维的数据降到一维,那就选取方差最大的特征作为这一维。这个过程就是一个降维的过程。
    那把这个例子和PCA算法做比较:.....
    .....Sklearn、其它降维算法
    讲完了降维算法,主要变量选取的第二大类方法是特征选择。
    首先得明确下降维算法和特征算法有什么不一样。.....


    一般有三种标准的特征选择方法:
    嵌入方法:即特征选择与算法训练的过程融为一体,由算法本身决定使用哪些属性和忽略哪些属性。比如L1正则、决策树等。
    过滤方法:独立于算法,在算法运行前进行特征选择。常用对特征重要性(指标如:方差、互信息、相关系数)排序选择,也可以用如随机森林、GBDT等进行特征选择(内置了方法),过滤之后再应用于当前算法。
    包装方法:算法作为黑盒,确定模型和评价准则之后,对特征空间的不同子集做交叉验证,进而搜索最佳特征子集。

    这里既然提到了随机森林,那我们在讲建模算法流程的主线上开一个分支,讲讲随机森林是什么?
    首先看随机森林的定义:

    随机森林是最具代表性的Bagging集成算法,它的所有弱评估器都是决策树。

    想要搞懂随机森林就得首先搞清楚Bagging集成算法算法是什么?决策树的原理又是什么?


    集成学习。就是将若干个弱分类器通过一定的策略组合之后,产生一个强分类器。弱分类器指的就是那些分类准确率只比随机猜测略好一点的分类器。
    目前集成学习算法的流派主要有两种:

    • bagging 装袋法
    • boosting 提升法


    装袋法的代表算法是随机森林,准确的来说随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树,所谓的进阶是随着森林在bagging的样本随机采样基础上又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。
    随机森林的”随机“表达了2种随机性,即每颗树的训练样本以及训练特征都是随机选取的。

    那既然随机森林的弱评估器都是决策树,那接下来就要讲讲决策树。
    如表,这是一系列已知物种以及所属类别的数据。
    现在我们的目标是将动物们分为哺乳类和非哺乳类,那根据已经收集到的数据决策树算法为我们算出了下面的这颗决策树。
    可以看出在这个决策过程中,我们一直在对数据的特征进行决策,而每个叶子节点都是一个类别标签。
    我们观察这幅图像,肯定有几个疑问:体温为什么是根结点,体温的左孩子为什么是胎生,右孩子为什么是非哺乳动物?
    那这两个问题其实就是决策树的两个核心问题:

    1. 如何从数据表中找出最佳节点和最佳分支?
    2. 如何让决策树停止生长,防止过拟合?

    决策树从表中找出最佳节点和最佳分支,衡量这个”最佳“的指标叫做”不纯度“。
    不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且此节点的不纯度一定是低于父节点的,也就是说在同一棵决策树上面子节点的不纯度一定是最低的噢。

    度量不纯度的指标有很多种,比如信息熵、基尼系数。
    公式

    其中t代表给定的节点,i代表标签的任意分类标,p(i|t)代表标签分类 i 在节点t上所占的比例。

    决策树的基本流程就可以简单概括如下:


    决策树的优缺点:

    那我们已经讲了决策树、随机森林,回到我们的主线特征选择上来,我们只要选取决策树的前几层特征就完成了特征选择的任务。由于时间关系,xgboost和adaboost也都是可以用作特征选择的,感兴趣的同学可以去了解一下,它们是基于集成学习的另一种boosting思想的。

    那我们的第三步任务是预测,预测即机器学习中的回归,那所有回归类的算法都可以被用于该任务

  • 相关阅读:
    c语言面试基础题
    fwrite(&stud[i],sizeof(struct student_type),1,fp)的基本含义
    对于文件操作函数的记录
    将字符串s1复制到字符串s2。
    将键盘输入的几个数据存储到文件里的程序
    利用指针对二维数组进行遍历查找程序
    常见的C语言错误及程序的调试
    文件的基本操作函数及说明
    一个磁盘信息向另一个磁盘信息的复制
    常用流程图符号和基本流程图
  • 原文地址:https://www.cnblogs.com/lwp-nicol/p/15141762.html
Copyright © 2011-2022 走看看