数学建模社区-数学中国

标题: 一份简短又全面的数学建模技能图谱:常用模型&算法总结(一)——主成分分析 [打印本页]

作者: 浅夏110    时间: 2020-5-19 14:40
标题: 一份简短又全面的数学建模技能图谱:常用模型&算法总结(一)——主成分分析
本文总结了常用的数学模型方法和它们的主要用途,主要包括数学和统计上的建模方法,关于在数学建模中也挺常用的机器学习算法暂时不作补充,以后有时间就补。至于究竟哪个模型更好,需要用数据来验证,还有求解方法也不唯一,比如指派问题,你可以用线性规划OR动态规划OR整数规划OR图与网络方法来解。
$ o, l* V# Y; A$ M+ k! i+ L, `8 _0 [; \0 S) l* B* |
总的来说,常用主成分分析来降维,综合评价的方法有因子分析法、层次分析法、....,用蒙特卡罗方法来随机模拟求解;还应掌握数据变换、数据拟合、参数估计、插值等数据处理,线性规划、整数规划、目标规划、动态规划类问题的求解要根据已知信息找出约束条件与目标函数,图论算法也是非常常用的,组合优化算法常用于很难求出最优解的NP问题,还有一些连续离散化的技术 eg.通过插值or拟合or光滑技术【移动平均之类的】可以把离散数据连续化,通过分组【把数据划分成不同的小区间】OR差分就可以把连续数据离散化....。此外的数值分析算法eg方程组求解、矩阵运算、函数积分等算法也经常用得到。至于图像处理方法稍后再补。后面会再补一份用python进行数据分析的资料。
& z9 h8 i. {  T/ E( v* p! h' O
2 V( m' ?' V( o0 y/ M1 l0 n) d4 r5 z【1】主成分分析
: t2 }, r* e2 s) V    目的是希望用较少的变量去解释原来资料中的大部分变异,把相关性很高的变量转化成彼此相互独立或不相关的变量,是一种降维方法。 在描述数据集中的样本时,样本又叫作实例、观测,样本可以由多个属性来描述,这些又可以称为特征、指标、变量、维度,比如描述某企业的员工信息时,数据集就是所有员工信息,每个员工就是一个样本,用来描述样本信息的性别、年龄、工龄、籍贯、工资....就是特征,这些指标可能有某种程度上的相关关系,就会存在信息冗余,就需要特征选择,也就是降维,常用的降维方法有主成分分析pca, SVD奇异值分解,逐步回归。。。
" j& A. R, A( z7 a3 ?3 ]
5 z! }$ x0 Z: ?0 o主成分分析 (一): 基本思想与主成分估计方法
2 _9 C/ Q8 r6 q' l( E2 L) u主成分分析(principal component analysis)是1901年Pearson对非随机变量引 入的,1933年Hotelling将此方法推广到随机向量的情形,主成分分析和聚类分析有很 大的不同,它有严格的数学理论作基础。  主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我 们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始 变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资 料的综合性指标。由此可见,主成分分析实际上是一种降维方法。
5 g+ |: ~; L1 b3 b8 m, ?
$ g! `  u  X5 y- m: @
& L8 V3 ~: u6 s4 c) L  c2 H% |  K/ i" m" S5 [! Z% o

8 \) F7 y- B5 T& z0 y2 y1  基本思想及方法
0 S5 z4 a) W- B* V4 \2 z" U8 e0 s& r4 e$ R" N* j) G5 A8 M
) Z. K. F  r& v  N! ]
6 D, `2 Q7 @" o% P
1 确定各个主成分的方法
. @5 o; O+ a% u7 w一个主成分不足以代表原来的 p 个变量,因此需要寻找第二个乃至第三、第四主 成分,第二个主成分不应该再包含第一个主成分的信息,统计上的描述就是让这两个主 成分的协方差为零,几何上就是这两个主成分的方向正交。具体确定各个主成分的方法 如下。 7 R+ a. h) U+ q9 e5 v, U
+ U1 ^( |, |6 Z" I3 R2 T- f9 o
5 A3 F6 P( [; P) O* Q
5 ?6 L" \- u5 E% W
2 注意事项
$ m+ a$ t* X3 f+ U5 m6 K% V* X* B 1)主成分分析的结果受量纲的影响,由于各变量的单位可能不一样,如果各自改变量纲,结果会不一样,这是主成分分析的大问题,回归分析是不存在这种情况的, 所以实际中可以先把各变量的数据标准化,然后使用协方差矩阵或相关系数矩阵进行分 析。* K) n3 V+ T4 a0 E8 Q* \( e0 ]: }

: g1 y6 X3 E) P" o6 F# L9 k5 T; Z 2)为使方差达到大的主成分分析,所以不用转轴(由于统计软件常把主成分分 析和因子分析放在一起,后者往往需要转轴,使用时应注意)。' C! E* `! E) o% v- V% w
" [7 I7 t1 G1 I7 W4 L! c
3)主成分的保留。用相关系数矩阵求主成分时,Kaiser主张将特征值小于1的主成 分予以放弃(这也是SPSS软件的默认值)。
0 h0 [. `& O( R  |$ W* j, g, A" y! J2 V' d; O/ D5 _
4)在实际研究中,由于主成分的目的是为了降维,减少变量的个数,故一般选取 少量的主成分(不超过5或6个),只要它们能解释变异的70%~80%(称累积贡献率) 就行了。  下面我们直接通过主成分估计(principle estimate)进一步阐述主成分分析的基 本思想和相关概念。4 @' a9 p* U: P

& p# p- w7 k3 e% z$ n8 J2  主成分估计
" ^. Q1 `  F, e" _# C1 s 主成分估计(principal component estimate)是Massy在1965年提出的,它是回归系数参数的一种线性有偏估计(biased estimate),同其它有偏估计,如岭估计(ridge estimate)等一样,是为了克服小二乘(LS)估计在设计矩阵病态(即存在多重共线性) 时表现出的不稳定性而提出的。  
; U% X6 f9 Z3 E; I2 [+ \6 l
0 a5 K' ~  J8 ?- E% X( W/ G主成分估计采用的方法是将原来的回归自变量变换到另另一组变量,即主成分,选择其中一部分重要的主成分作为新的自变量(此时丢弃了一部分,影响不大的自变量, 这实际达到了降维的目的),然后用小二乘法对选取主成分后的模型参数进行估计, 后再变换回原来的模型求出参数的估计。
5 V+ C6 c5 X+ v% c( ~% D5 w+ b& y7 R& N/ {
" o" M+ [" b$ y0 d" C$ ~

1 k" d# R) y- o. p
; y3 R4 O) I( L0 I单参数主成分估计( g4 r2 n: \- R% Q
理论上表明:主成分估计在设计阵病态时优于LS估计,但(31)在特征值为1的附 近存在跳跃,会影响计算的稳定性,杨虎在1989年给出的单参数主成分估计解决了这个 问题。
* k& C! h$ I3 E& K# B+ Y. O6 R) v7 K+ Y: A' k5 o: ^+ Q7 o

, S' E6 {, T5 L/ y9 l例3  Hald水泥问题,考察含如下四种化学成分 4 F: S, [1 p# \+ o8 a! Q9 H2 y& p0 F

5 n* J9 n( A1 w$ i( X  O: A* i
! I& i) j0 e# k' e- K6 {: l2 t& d
6 G3 D- `* C. `; n8 ?
相关系数阵的四个特征值依次为2.2357,1.5761,0.1866,0.0016。最后一个特征值接近于零,前三个特征值之和所占比例(累积贡献率)达到0.999594。于是我们略去 第4个主成分。其它三个保留的特征值对应的三个特征向量分别为 3 E3 o/ u( q' L8 a
# r5 o  ?) p& }2 o

# Y/ w( }6 c& z/ Y# D  U8 i3 a& W' O9 Q2 w  ^: \
对Hald数据直接作线性回归得经验回归方程
  I- r" V  m/ a0 Z0 P- I
5 U3 ^# H- F* j% M, J/ N6 H
. G7 r9 p) t1 p" x- h! ^7 Z7 S3 p+ l3 p1 |- p  W
再由(31)式计算出主成分估计,即可获得如下主成分回归方程 ( L; I, L0 k) d& b' [, D

* D/ i1 {7 G: L( }7 l( m( @& V% T+ S6 L; p/ G# M/ c

& f/ t) M- @8 v: J( Y( K! ]两个方程的区别在于后者具有更小的均方误差,因而更稳定。此外前者所有系数都无法 通过显著性检验。  计算的MATLAB程序如下:
* Q/ U4 R* m) M1 ]clc,clear
1 y1 q! z6 ]) c: A: _load sn.txt  %把原始的x1,x2,x3,x4,y的数据保存在纯文本文件sn.txt中 : ?4 [( `- |1 L# ]+ s, h% a5 x
[m,n]=size(sn);num=3; %num为选取的主成分的个数 8 z% q6 b; r0 d1 w9 e/ j6 p: s
mu=mean(sn);sigma=std(sn);
' P; D9 n8 Q: S& Ysnb=zscore(sn); %数据标准化
. ]& z. k8 V' I. Y0 Vb=snb(:,1:end-1); %x1,x2,x3,x4的数据赋给b / f* D: d% \/ a
r=cov(b);  %标准化数据的协方差阵就是相关系数阵
7 `4 C, J! l& V' e/ e+ `6 @[x,y,z]=pcacov(r);
% t  m) S& r! If=repmat(sign(sum(x)),size(x,1),1);
- h! l% C$ }- y! y# Tx=x.*f; # c9 H5 y- s6 W9 I
%以下是普通的小二乘法回归
/ p3 G' T, e; ?r=[ones(m,1),b]\snb(:,end);  %标准化数据的回归方程系数
. o1 R8 U! g# m8 Mbzh=mu./sigma;
0 P3 i3 P! p. |9 Ach10=mu(end)-bzh(1:end-1)*r(2:end)*sigma(end)  %原始数据的常数项 1 D) j  v5 a8 ~# {
fr=r(2:end);fr=fr'; * F* U' K" a* I: ~' R6 M6 Q2 Y8 `
ch1=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数
* ^' B) K! [# b/ }. {: P%以下是主成分回归 & N8 A0 c( l9 c7 ~% u+ i
pval=b*x(:,1:num); 6 L! Y/ ?, Z) m- [
rp=[ones(m,1),pval]\snb(:,end);  %主成分数据的回归方程系数
  ~' H/ e% b5 _' `; y; wbeta=x(:,1:num)*rp(2:num+1);           %标准化数据的回归方程系数 ) B$ p1 \. t2 [$ i
ch20=mu(end)-bzh(1:end-1)*beta*sigma(end)  %原始数据的常数项
: M! z$ Y0 u2 R& Q  o6 v# ?& R4 c4 ~fr=beta'; % x6 V: T+ S% b7 ^% Y4 F
ch2=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数
( D) T. b6 v% G% fcheck1=sqrt(sum((sn(:,1:end-1)*ch1'+ch10-sn(:,end)).^2)/(m-n)) - C( F, E' X  g- V
check2=sqrt(sum((sn(:,1:end-1)*ch2'+ch20-sn(:,end)).^2)/(m-num-1)) * r$ N( _. z# M+ Z, g0 V
& m, q' f: e- P/ o6 u- _' b
. ?" n( U$ o5 O3 r
% H4 r% Q2 x6 D2 u9 i
4 `5 V7 s/ R8 T) C+ f- R! p1 j
. S1 _/ H7 H3 l9 A$ x
主成分分析法(二):计算步骤0 b* a) X2 ~9 V7 D2 E
主成分分析法的步骤
, T) b2 y5 Z3 w' U- ^1)对原始数据进行标准化处理
2 m3 i! m) R, a+ \
# [( A  H$ ]6 \, g, P2 n& F. ?5 @0 D) @# i1 [
           其中 , 即分别为第j个指标的样本均值和标准差。  {: w. L- W  N( k/ w' v7 V/ |

2 s" Q9 ~  c! E& w$ E6 `; a3 ]( ?
2 _3 V* Y9 m3 w/ b5 ^4 T, c) c% K8 f) K* J/ n4 }' `1 v. s
2)计算相关系数矩阵R 8 q: L( |+ P! Y. U0 o' x" c
- _# ^( M3 ^1 T. I# z7 Q

! |5 d" M1 e$ p/ q. l% o. \3)计算特征值和特征向量 ; T8 B: u% i6 u5 n# T1 O$ R4 N
   特征值要由大到小排序
+ |- J3 p8 X% d' y- Z  c1 m
0 Y& \. @& t- ?* ~8 L# B
6 T8 P' r7 q: T: g! C9 L# Y) ^6 n% |0 q) W# G# B" c. a
4)选择 p ( p ≤ m )个主成分,计算综合评价值
* f7 e9 }# q* E1 l+ [2 R% o* ^: g; C% S1 z7 l/ j

$ D* e% c1 J- [6 d. ?4 h: s) ^" ]5 x- r
3 `- T* m+ E7 T. B" T
h
$ i/ d- ^& m4 `2 q) R: W, |6 M5 N( D6 l6 t
matlab实现主成分分析的pcacov( )函数8 n( p* G1 v/ Y" ?
clc,clear
( o6 J0 m7 r. N) z9 b9 H3 y/ oload gj.txt   %把原始数据保存在纯文本文件gj.txt中 : u* Y. L, P% M9 n
gj=zscore(gj); %数据标准化 9 [, A: m9 ?8 u+ h' B* C  b
r=corrcoef(gj);  %计算相关系数矩阵 / ^+ ^! U' r( f5 R% n% g  `  E
[x,y,z]=pcacov(r);
% Q* u, A$ Q& Q, D+ Zf=repmat(sign(sum(x)),size(x,1),1);
0 ]5 ]) Q, i. @& r2 f7 x3 Nx=x.*f; # `: l7 ^0 Z2 e6 O. D) U; ^
df=gj*x(:,1:4)
7 a- I, T8 ~2 Z6 Htf=df*z(1:4)/100;
1 V3 A  K0 x$ F( i- K. K[stf,ind]=sort(tf,'descend') 0 Q' T- h' C0 G6 Q
0 s" d2 j+ ?( K7 T& g  e

- J$ S' `  ?' k7 L2 N' B& Q3 P/ B0 k
————————————————
, y# N! k5 A" v: O版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' P& K0 {" I8 ?7 v) g  C) L' F5 _
原文链接:https://blog.csdn.net/qq_29831163/article/details/88900766
2 g: h/ W  c$ r( w- ?# {# D4 x. Y
8 u. Z8 Y# D. R7 e$ t1 l
1 L; ^6 W7 _( k8 E# K3 ~5 f





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5