在线时间 90 小时 最后登录 2018-12-27 注册时间 2016-4-22 听众数 17 收听数 0 能力 20 分 体力 23473 点 威望 2 点 阅读权限 200 积分 7546 相册 0 日志 0 记录 0 帖子 126 主题 100 精华 2 分享 0 好友 6
升级 50.92%
TA的每日心情 开心 2018-6-4 15:01
签到天数: 7 天
[LV.3]偶尔看看II
群组 : 2018年大象老师国赛优
群组 : 高考备战
群组 : 2018中小学数学建模冬
统计算法总览
& Z$ ^( L- C( `, W' @ , R5 S: ]" L( d
统计一词源于国情调查,一般来说包括三个含义:统计工作、统计资料和统计科学。其中统计工作是指的搜集、整理和分析客观事物总体数量方面的资料,统计资料则是由统计工作所获得的各项数字或文字资料,一般反映在图表、分析报告、统计年鉴里面,而统计科学则是指导统计工作的原理、原则和方法。
) _6 y% @1 i' f/ K& N. P 因此,在数学建模比赛中统计问题一定要有文献资源和数据资源的搜集,并且这一部分内容也要反映在论文中,而整理通常来说是将搜集到的资料以图表的形式呈现在论文中,最后分析自然就是数据预处理和统计算法建模求解。
9 a0 D6 U% y9 Z( Q
8 r0 E& y: K% g3 L 1.预测 3 W6 p9 u/ r [9 M% {
& e/ G$ S, c# Q( f7 B
预测,顾名思义,即根据先用数据规律推算接下来的数据。而预测按照算法可以分为四大类,一为回归分析,二为概率估计,三为时间序列,四为机器学习。( a7 C4 F5 W* l# L, K1 q3 W( b& g
+ }2 H; M8 X S* r0 K. g
(1)回归分析 N j) m" }$ ~9 o
& G' F: M; {2 f5 U. Z
对于回归分析,该类算法适用于求解单一输出的问题,在某种程度上可以叫做函数拟合,即利用一种函数去逼近原有数据 。我们在高中阶段学习的线性回归就属于一种预测方法,下面给出几种函数类型:
& ^9 P1 K8 m2 A+ `; E' ?( i- R9 H
5 d: u9 W: N f/ s6 z* M 多项式拟合:
) ~8 I) D9 y7 G& E5 Z4 w - @) D+ @/ O; g# _! Q
非线性拟合:
6 q5 w' Z: d, f* [/ g w
: w' H1 U+ v h2 S' T1 P
多元拟合:
& O2 J" {7 w6 c0 F9 t% h , S4 O U. ]. B' d
如下图所示,该图像是利用了非线性函数对原有数据进行了逼近,有了函数自然也就可以根据输入计算出接下来的数据,所以回归分析也只适用于单输出问题。而回归分析的关键问题就是对某一函数模型的参数进行求解,matlab中有专门的拟合工具箱polyfit和lsqcurvefit:+ A6 w0 b5 _! ]! }3 S' Q
5 e* `+ ]- B/ M5 o; o
这里小编用MATLAB编了两种基础的回归分析程序。 # W# _3 O% d4 {$ A& k* ~( B3 c
效果如下:8 o- o. p- l+ F. R& R u- g& Y
0 ~8 E" L. M1 y [8 J" u M7 x
) C4 C, I* \* d, d1 [ (2)概率估计 + _$ u; o# a1 s: M3 t
% Z' c+ o4 f2 P A: Q: M
而对于概率估计,其中的代表是马尔科夫链算法,即先给数据划分状态,然后将数据的分布规律用状态转移来解释。最后对于当时数据的状态,利用根据状态间的转移概率可以求得未来的状态概率分布,自然也能求得下一状态的预测值。
# T9 n4 ]5 O/ g0 Y4 c* A3 J; o0 _ % q5 J. L2 C7 j( K0 G- B
比方说,我只去A,B,C,D四个食堂吃饭,现在告诉你我吃饭的记录,现在就需要计算我在这四个食堂中的转移概率,如我去食堂A吃过后再去四个食堂吃饭的概率是多少?通过这些转移概率不断推算我下一个要去的食堂,再根据四个转移概率得到最大可能去的食堂。但是这只是离散问题的预测,对于连续问题,自然也就需要将连续数据划分为若干个离散的状态,在使用此方法。
" N+ ]3 H. t1 v
$ j: z+ T6 `5 _2 w* |/ F 此方法对于初学者来说掌握会比较困难,不过如果能成功使用会为论文添色不少,有兴趣的同学可以自行查找资料了解。(《数学建模算法与应用》一书上有讲解)
# G T' j/ G+ y6 N" j. t' x6 W' N7 ]
: C7 H5 ?% g) O1 ~5 ` (3)时间序列 3 V7 z) q/ R6 I' ^
/ I! {; z9 }% L/ M 第三类称其为时间序列,因为输入是按顺序的离散值,大多数情况下就是时间,针对此类问题,由于输入以稳定步长增长的,所以不用考虑输入,直接研究输出的变化规律,这一点类似于高中学的数列,比方说有名的斐波那契数组:1,1,2,3,5...,它的数据特征是f(n+2)=f(n)+f(n+1),现在我们要求后面的数就直接利用该数据特征就行了,当然也可以求出其通项公式,有兴趣的同学可以求着试试。
& p n+ [$ [/ U: C, Y* L
& `' I- i$ z% H# A2 _ 而时间序列方面的算法其实就是猜测数据前后存在着什么关系,比如说:一次移动平均算法就是猜测每一个数据 与最近的部分数据的均值存在着某种关系,指数平滑法就是猜测每个数据都跟之前的历史数据的加权平均存在着某种关系。这些算法都可以算作是时间序列算法,不过以上算法都是对数据特征简单的猜测,而对于更复杂的数据特征则可能会用到微分方程,利用微分方程,即可以直接预测,还能用于灰色系统,从而将无规则数据转化为有规律的生成序列。
6 C) i8 w6 I9 C. m
- j5 S# t5 {* i+ Z8 m+ f9 @ (4)机器学习 ) h0 \ B% T" D. B; Y o
5 G. Y8 C9 v7 n, E2 H/ L
最后一个就是机器学习,即我们只需要搭好框架,数据特征则会由其自己挖掘,比较有名的有:支持向量机(SVM)、决策树、神经网络(深度学习)。这种算法的最终目的是模拟人脑的结构,它的好处就是在搭建好网络结构之后,通过对已有数据的学习,网络会自行提取数据特征,然后只要我们输入一个数据,网络将自行计算,然后输出它的预测值。这种方法的优点是方便,无需考虑数据规律和数据维度,而缺点则是要求数据量要大,少量样本的训练效果一般不具有适用性。; F6 M+ a. ]7 c" i1 X
. M: L! B5 m& J
(5)模型检验 # g9 z0 M9 f7 o8 _/ A0 Z0 V
% l2 d; B; y% P! D! R/ y9 g7 U4 R 预测问题中尤其还要注意的是对结果的检验,通常使用残差和后验误差等作为概率统计的检验,也可以用均方误差MSE检验。
+ D- C$ {/ w6 Y: x# y e+ } w1 E5 T 2 F) N9 O8 D, y" b. v& R N
残差值反映了预测值和原始数据的相对差距:
& v L6 E: J. A- j3 d- L
* _7 G% G" Y) V2 ? 
) }2 q; H2 q+ ~1 ` A
s# v4 w& V" R$ f! C6 q 后验误差反映模型的精度:
7 J" `! w6 o; L 0 O+ o7 K( E5 ^& w
3 _ P% @# }- c% h
- O# E7 O; C) l1 O0 f+ M( i 然后依据下表判断模型精度:
2 B9 z( ^8 n/ k1 @$ q/ V+ l6 i
0 o) a- m6 v$ F $ t4 U1 a* m# M$ v3 G, `
# A' v/ @3 J8 [' ]! L* b* r
/ t+ L: s; w0 J9 c. j 均方误差则是一个简单的误差效果:
$ A! c4 v0 g, l1 l / c: i/ ]+ w5 a% j) p: B0 ?1 t

$ T; z: N" _" @5 r. w I4 y6 T o& T - o, r; N2 Z+ E( ~
2.分类/聚类 + o- I* h, L+ ^3 O3 q0 l y8 Z
6 f: h/ F# K0 | 首先要弄明白分类和聚类的区别:+ t5 b5 W7 x- `9 O( s0 `" Q
) Y U0 q. d. P, \% K6 [3 ] 分类(判别):数据包含数据特征部分和样本标签部分,分类的目的就是判别新的数据特征到其应有的样本标签(类别)中。
8 ~( ^- v: W* J+ i3 y% Q! ] 8 r H$ _$ z' U! j1 i
比方说,现在告诉大家一个教室里面其中一半人每个人的性别(男女),现在需要大家将另一半人中每个人的性别判断出来,因此大家首先要做的的找到区分性别的特征,然后应用到另一半人身上,将其归类。
$ c3 M2 t" Y2 l; x: [) c % v4 {4 G% g* p5 ]
聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。 R( j" F$ u) J$ B. {" |
5 p; _% o' _1 @0 S
同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。
" s$ x* P/ ~+ {/ U7 ~1 J# a _ . `' f; n* J8 H8 L- W5 G
可以看到,分类其实跟预测差不多,只不过输出是一维的,并且还是整数,所以可以用预测中的机器学习方法来解决分类问题。而聚类则不同,一般来说,聚类需要定义一种相似度或者距离,从而将相似或者距离近的样本归为一类,常见的有:kmeans算法、分层聚类、谱聚类等。2 B' P% G2 c. c4 z$ B2 K9 \/ Y
3 p& r$ E! U! Z- p 对于聚类来说,除了相似性的度量之外,还有一个比较重要的是终止条件,即需要聚成多少类,一般来说,基本都是在聚类之前就设定好需要聚成多少类,其中kmeans就是先设定几个类中心,然后将与类中心相近的数据归到那一类,然后不断更新类中心,直至所有数据聚类完毕,而分层聚类则是相反,先将所有数据各自为一类,然后将相似的类合并,直至达到k类为止...- H* r' ~7 e/ S2 A: W! a% Y" A
当然,也可以将终止条件改为当最小的距离大于某一阈值时,不再合并类(适用于分层聚类),除了这些算法,还有机器学习方法,如:自组织竞争网络(SOM),可以自行了解。
9 A1 y0 v6 S" Y6 X
( F4 R' E7 ^$ P- L4 } 接下来我们以分层聚类为例进行讲解,这一部分例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。
0 h! V+ p# w6 z. G4 Q! k ' v9 U* g# a: v1 R l$ \3 |
例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述:# i& J+ G. r/ `5 ]
' v: ^" f8 l2 b! ` 
" {+ ~3 t6 X$ r9 r. ] ( @0 B7 Q# Y1 F
将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为:
0 X8 }0 M% L2 D5 k: }
1 K4 ~. {6 m0 S ^
3 ^) J `$ ]9 o! ]' m' c2 s3 K$ l 
! F: o# n( i8 h
7 u) b8 M/ Q8 i5 `! P$ B* `( M9 C 与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:: w" r9 o9 N: p( r b, d9 N1 m
& D% ]# X+ q* B3 z O5 _- ^ 
" P! z- p. v2 p9 E# n
; w! g7 U- x3 Y; M" M' c1 a5 w 因此,可以得到任意两个销售员的数据距离矩阵:
2 ]! z2 x9 |' c4 _- R4 m ' F6 ^) t5 O; @& { l. @/ ?, Z# M
1 D0 C/ I/ m9 s' k0 p
5 }# P$ x/ y6 V& }+ A! F' ?
Step1 首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类;
- y" r, x7 G: E, [4 C / p" V: k" x9 b
Step2 然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是 w3,w4,他们的距离为2,所以将其聚为一类;
/ q w1 d: f( N& B5 p: @+ h/ l; Y # }4 s0 g& K- O2 N4 [ E' K5 y
Step3 然后,剩下的样本为{w1,w2},{w3,w4},w5,我们发现除了距离1,2之外,最相似的 是{w1,w2}和{w3,w4},他们的距离以 w2和w3的距离为准,距离为3,所以将这两类聚为一类; 0 v1 Z9 [6 H! O% B
8 Z5 l& L2 c' A0 _. x1 o
Step4 最后,剩下的样本为{w1,w2,w3,w4},w5,只剩最后两类了,所以最后一类为 {w1,w2,w3,w4,w5},类间距以w3/w4与w5的距离4为准。
, ~- h W6 a1 i+ g * y( r) D, q+ i
用matlab编程结果如下:
/ T: y: T' Q$ \4 ]* D . ?( Y% o- \ z9 F- e, z

6 T* J9 c5 U! Y& P
. M5 F" X8 B6 W- U
" c* y2 d( C0 x! [4 r
0 Q: t* ?% c1 _0 K8 N+ }0 I& [
% r4 ]- K( L0 D0 G0 h ( r9 n( f% o3 D) ]/ a
zan