本文总结了常用的数学模型方法和它们的主要用途,主要包括数学和统计上的建模方法,关于在数学建模中也挺常用的机器学习算法暂时不作补充,以后有时间就补。至于究竟哪个模型更好,需要用数据来验证,还有求解方法也不唯一,比如指派问题,你可以用线性规划OR动态规划OR整数规划OR图与网络方法来解。- m# s {+ k. ~9 p
9 s- p$ g' \& |# {$ W' ^& _& E总的来说,常用主成分分析来降维,综合评价的方法有因子分析法、层次分析法、....,用蒙特卡罗方法来随机模拟求解;还应掌握数据变换、数据拟合、参数估计、插值等数据处理,线性规划、整数规划、目标规划、动态规划类问题的求解要根据已知信息找出约束条件与目标函数,图论算法也是非常常用的,组合优化算法常用于很难求出最优解的NP问题,还有一些连续离散化的技术 eg.通过插值or拟合or光滑技术【移动平均之类的】可以把离散数据连续化,通过分组【把数据划分成不同的小区间】OR差分就可以把连续数据离散化....。此外的数值分析算法eg方程组求解、矩阵运算、函数积分等算法也经常用得到。至于图像处理方法稍后再补。后面会再补一份用python进行数据分析的资料。, }) a! B) y! S Y
( v0 G9 d n- g8 I1 确定各个主成分的方法 / N, B% c- ^, |. V一个主成分不足以代表原来的 p 个变量,因此需要寻找第二个乃至第三、第四主 成分,第二个主成分不应该再包含第一个主成分的信息,统计上的描述就是让这两个主 成分的协方差为零,几何上就是这两个主成分的方向正交。具体确定各个主成分的方法 如下。 * \) S1 F* g5 B: |) @* {
8 A* a9 G, E8 A* T( h3 L. r9 a4 m0 Q
. j% Q$ a+ @4 \# L& r# y
2 注意事项" y& C; ?6 o8 u7 P& p, c
1)主成分分析的结果受量纲的影响,由于各变量的单位可能不一样,如果各自改变量纲,结果会不一样,这是主成分分析的大问题,回归分析是不存在这种情况的, 所以实际中可以先把各变量的数据标准化,然后使用协方差矩阵或相关系数矩阵进行分 析。% ]5 y4 O$ f* F5 I5 I4 A: A2 W
" H3 h* K1 O1 r6 ]# M `+ r
2)为使方差达到大的主成分分析,所以不用转轴(由于统计软件常把主成分分 析和因子分析放在一起,后者往往需要转轴,使用时应注意)。 * s# Z8 Q- L( G5 K& ^2 I( A0 E) I! w0 u4 U" s
3)主成分的保留。用相关系数矩阵求主成分时,Kaiser主张将特征值小于1的主成 分予以放弃(这也是SPSS软件的默认值)。: _9 u4 J4 H H% O. ?6 ^: u
: L6 D2 Z6 l. |' Q 4)在实际研究中,由于主成分的目的是为了降维,减少变量的个数,故一般选取 少量的主成分(不超过5或6个),只要它们能解释变异的70%~80%(称累积贡献率) 就行了。 下面我们直接通过主成分估计(principle estimate)进一步阐述主成分分析的基 本思想和相关概念。 T+ w7 D" H8 ^6 R& Z" T9 |" G8 ? 4 R+ U4 K' R& ~2 主成分估计 8 ]% w* B* v7 F6 d5 o, v 主成分估计(principal component estimate)是Massy在1965年提出的,它是回归系数参数的一种线性有偏估计(biased estimate),同其它有偏估计,如岭估计(ridge estimate)等一样,是为了克服小二乘(LS)估计在设计矩阵病态(即存在多重共线性) 时表现出的不稳定性而提出的。 ( a \, o5 l, H# B" Q ! x! H) B6 T: j3 j: B主成分估计采用的方法是将原来的回归自变量变换到另另一组变量,即主成分,选择其中一部分重要的主成分作为新的自变量(此时丢弃了一部分,影响不大的自变量, 这实际达到了降维的目的),然后用小二乘法对选取主成分后的模型参数进行估计, 后再变换回原来的模型求出参数的估计。 " g+ E# T6 \5 l! x) U" o
# |: B! |9 |3 t0 x5 i% l - M( L2 r9 N. c3 q1 A, |) a5 {, }$ d( H- X! a2 r
9 S, J+ y, G# E$ ?- s; q; e, H3 \单参数主成分估计$ l8 O( ?9 Z+ n
理论上表明:主成分估计在设计阵病态时优于LS估计,但(31)在特征值为1的附 近存在跳跃,会影响计算的稳定性,杨虎在1989年给出的单参数主成分估计解决了这个 问题。 ! t: G e# Q M6 Z) E, S& b2 X8 R 5 f8 X/ a5 ^1 _2 `* C8 F ; G7 i x) E1 w( B8 _0 n; y; Q g例3 Hald水泥问题,考察含如下四种化学成分 7 ^$ U/ S2 Z0 z4 A8 z8 G* t! A
0 E! V$ E" L6 E- s2 s ) U: N# ^8 |( {/ m; ~; `. f' ~ d, S, t) b% k+ G1 e
, B3 U, X! a5 L相关系数阵的四个特征值依次为2.2357,1.5761,0.1866,0.0016。最后一个特征值接近于零,前三个特征值之和所占比例(累积贡献率)达到0.999594。于是我们略去 第4个主成分。其它三个保留的特征值对应的三个特征向量分别为 ! j6 ^) n5 T8 w. i2 L
: H& _8 `% {9 H% c! z. Q 0 j5 \! h. v- n9 @4 _8 Y; H4 V% p7 G
对Hald数据直接作线性回归得经验回归方程 ' i4 y+ I' L$ _& }7 m& Q2 y
+ A5 F# T1 i* B r W! F( u) r3 E2 u4 A" L7 W. w2 Y1 S
! N4 L: g5 ]8 C' d6 l) S再由(31)式计算出主成分估计,即可获得如下主成分回归方程 , d' b+ G6 V5 E( d- L2 S$ P / U9 R* a' j9 W4 w% P8 ~! n* w/ d; b% @( }. V) @* a
$ l5 H# {" I7 F; G4 x4 v两个方程的区别在于后者具有更小的均方误差,因而更稳定。此外前者所有系数都无法 通过显著性检验。 计算的MATLAB程序如下: % M: y# ^# D! O$ I& U/ T, u clc,clear # W( T8 j7 q3 Jload sn.txt %把原始的x1,x2,x3,x4,y的数据保存在纯文本文件sn.txt中 * T4 q0 J, S5 Y9 h8 e [m,n]=size(sn);num=3; %num为选取的主成分的个数 8 s& i- R: W9 o/ D. V- c mu=mean(sn);sigma=std(sn); ' t# g. s: y* Y" d/ l8 c- V, ^: wsnb=zscore(sn); %数据标准化 * n9 D8 Q/ Y" K) _2 L b=snb(:,1:end-1); %x1,x2,x3,x4的数据赋给b 0 F0 y- Y- Q8 I) {! S r=cov(b); %标准化数据的协方差阵就是相关系数阵 $ T Q& y# F6 G; Q) K* ~[x,y,z]=pcacov(r); , ]5 s i9 {3 d2 j4 N f=repmat(sign(sum(x)),size(x,1),1); 8 K* v) c m; F. X6 E( [+ P/ Q( ^x=x.*f; ) _+ }8 o1 H0 _ %以下是普通的小二乘法回归 ' b8 S& f- Y+ @6 m: I' S" Nr=[ones(m,1),b]\snb(:,end); %标准化数据的回归方程系数 1 D' a% b8 u3 d( B" k/ k bzh=mu./sigma; 1 |6 C) ~9 H% h+ `( o V+ Ich10=mu(end)-bzh(1:end-1)*r(2:end)*sigma(end) %原始数据的常数项 ; S$ K* R7 L& J! pfr=r(2:end);fr=fr'; ) E: Z% ^2 U5 q" f% }ch1=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数 & ~4 |1 \: q& F y* Y%以下是主成分回归 4 b3 F( W- _ qpval=b*x(:,1:num); * N6 P, S' |6 y$ q) M: x" e# Lrp=[ones(m,1),pval]\snb(:,end); %主成分数据的回归方程系数 6 h, J: u# c4 z5 P, O7 A0 Rbeta=x(:,1:num)*rp(2:num+1); %标准化数据的回归方程系数 % y( ?; a, o* a4 w8 y, m$ Z ch20=mu(end)-bzh(1:end-1)*beta*sigma(end) %原始数据的常数项 $ E* N" M' L9 p6 e( U+ O4 vfr=beta'; - w8 }" Y3 ^1 |( Rch2=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数 . F* u2 J9 j( f1 m check1=sqrt(sum((sn(:,1:end-1)*ch1'+ch10-sn(:,end)).^2)/(m-n)) ! ^" F% `' \# b9 b0 h, ] check2=sqrt(sum((sn(:,1:end-1)*ch2'+ch20-sn(:,end)).^2)/(m-num-1)) 2 Q# f+ l+ z6 g1 Q* X1 Z9 r 2 y% d' Q& ~: u& C 2 w' t5 z) h/ L# M+ E& B/ U1 a7 k2 ?* B: J% l8 p3 g d
% X8 Q5 m* F% `% \/ R8 a- ~1 ^3 |0 X2 H 主成分分析法(二):计算步骤3 h5 V. \6 d: l; B4 A/ t3 O
主成分分析法的步骤 $ F2 E G7 ? g& o1)对原始数据进行标准化处理 7 c5 x! n B0 ^# t4 s3 p4 Q+ y/ P/ r2 v3 w6 S, T2 J( W
+ Y. c* B! n7 U& O( K 其中 , 即分别为第j个指标的样本均值和标准差。0 r8 l6 e4 ~7 k
% ^. f' N8 B$ M) q/ | ) y1 m2 |: ? l& ?. f
' N5 a% q7 F+ F/ w( }
2)计算相关系数矩阵R $ j; V {4 q: `8 L : l7 R9 E# c% w" p0 u2 f/ }$ z
' J8 e5 L2 G; b f3)计算特征值和特征向量 4 c: Y1 z8 C- X" J+ h2 s 特征值要由大到小排序% _0 }! e. j, P6 b( Q! y
9 G* x- @3 d# b6 M \1 o 8 t! [4 ]# s8 o7 x 4 M4 O. f8 k4 }4 Z) k, j4)选择 p ( p ≤ m )个主成分,计算综合评价值 9 R3 E, k9 M$ n8 A6 u
3 |" W5 C6 Q3 j: }) g# `8 C3 B; m/ C - O' n$ R: L5 Z0 p" K5 y 6 W H: o: X! g C# H& t6 @" ?; C4 Y6 S1 k; V& x, G
h: P6 F9 x, A, Q8 C! y* `
! H$ J& g! H; l$ w9 i
matlab实现主成分分析的pcacov( )函数8 k1 l) i$ @) s `3 X
clc,clear + E; ?1 A2 Y" z, c. \ f2 ?- A- {6 c: {load gj.txt %把原始数据保存在纯文本文件gj.txt中 7 L, ^/ Z" G2 b& c+ [* H: |# qgj=zscore(gj); %数据标准化 ) D! x! z0 p/ C5 i. Y6 Kr=corrcoef(gj); %计算相关系数矩阵 3 C4 F! U! a- b" B[x,y,z]=pcacov(r); ( L' p1 i$ o4 T, R6 r. I z5 r
f=repmat(sign(sum(x)),size(x,1),1); . S; n/ g4 ] ^/ |1 U' bx=x.*f; 3 Y: B4 ?% f* R) x
df=gj*x(:,1:4) 0 { j9 ?# \. L0 y2 C; S) {tf=df*z(1:4)/100; ! ?, @. ^" I: H6 M' A' |[stf,ind]=sort(tf,'descend') ! |6 y6 h1 T6 ?6 ]/ A
, g' e( e4 }+ R! t1 i
. A7 |3 @" z/ F6 y. R4 h) N' Z