数学建模社区-数学中国

标题: 灰色预测模型Python代码 [打印本页]

作者: 2744557306    时间: 2024-12-21 16:49
标题: 灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
2 k1 o( W$ C- {+ X& h* M上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:! W3 p3 k( A  g9 T" f, y

) t5 ~# X% Y  x5 J+ \% B9 z### 1. 灰色系统理论
3 H8 ]( C* t7 a5 `, K, R& _2 K
% U$ p+ [+ N1 r" l0 W" U# N- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
/ w8 J0 M5 p- t
' r  R* e* c! R### 2. 灰色预测模型 GM(1,1)
7 s( c1 [* {: B+ C. B: m$ ]# W/ l, R: ?8 s& f. X6 f
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:: [! U2 R& m% X3 K% z
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
+ q; x; x7 Q. ^( |1 \% M1 ^& L+ f2 o% ~' T: l# i. d2 P
#### 数学模型
& [- k, f) P3 [  \& X( R1 t% E6 C4 b1 L
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):5 j% S  t, Y3 {7 X
9 k9 p' S* P4 `
\[
/ b. [9 W7 {$ Q3 j- J& `X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
' W9 ^  L/ y5 c# a2 }$ J( l+ a\]
* y; @, R+ t' K) J1 x0 z) c3 z5 T7 Y, C5 Y! A5 R
### 3. 公式推导
" }* T1 e; ^7 h) M; l8 g* h
) W0 V; _1 _+ R6 z3 F# O( j# M#### 3.1 数据矩阵与目标向量
) ~4 I7 i% A, k
% ]# R2 V+ |. \( l在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):: c1 N1 l, i$ s' Z9 K

' H  s; D4 ?8 T8 A\[4 A& e4 Z5 Q9 r# w4 G2 N" E% l5 |
B = \begin{bmatrix}
- `& ^3 Z7 v  O% O-0.5(X(1)[0] + X(1)[1]) & 1 \\
( n" y+ c+ `8 C; V! z-0.5(X(1)[1] + X(1)[2]) & 1 \\
! T- h4 P$ q0 i0 n1 k4 V6 Z\vdots & \vdots \\4 H2 Q0 X3 B" x$ w
-0.5(X(1)[n-2] + X(1)[n-1]) & 1: c4 b7 y% _2 E' B$ {
\end{bmatrix}
4 C3 a& \8 Q6 e& h\]- A* U) i/ j* m( y! _
\[
5 t' d) o1 B; J$ L0 v4 f" \; w, bY = \begin{bmatrix}
0 K4 i, w6 z' \# Z1 G% _/ S2 ]9 ~x_1(0) \\3 b$ q8 ]* R8 _" q2 x0 }$ Z
x_2(0) \\/ B' P! v+ s/ P: P2 z$ Z; o
\vdots \\
. E% h# e8 H9 C+ x) |x_{n-1}(0), ~3 o$ @( u9 J! b! D" q6 C2 o
\end{bmatrix}
. U3 S: O7 u& J- p2 ]6 }) i) E\]
' k0 a9 @5 @  P) X8 X% i8 S- o9 Q& j' _
- **参数识别**:
* h6 B# G* z. C+ V) p/ l2 H将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。  F! t) Q% ^4 c/ T, @" K

( p; g9 K( Z; D, J#### 3.2 最小二乘法
( e% F; j0 V# P! Q: Z+ T0 f2 @7 m- w2 _* W* b
通过最小二乘法求解参数:
0 J! N  c$ t; t4 L9 Q, h7 f  n( u& ^' n5 x
\[
* c. y' [: u% P+ gA = (B^TB)^{-1}B^TY$ H" h5 ~4 n9 m
\]
# n8 g) O$ B/ x, p* ]& W* D0 z9 A3 z* Y5 c/ p) N
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:
" x2 q& ?( U$ S% R  - \(a\):表示数据的增长率
3 A: t9 Y- Z8 w7 I$ v+ p6 q0 a  - \(u\):表示系统的外部干扰! A& m$ k3 N$ Q2 f* _
; }; P) S# S- E( H4 i6 ?
### 4. 灰色预测. Y9 u" x; u9 i/ J

" B# P" C! T7 E通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
# H7 n- u0 l) O$ a/ y
9 B7 N: d1 P8 T4 m4 \# |9 Y5 `\[9 e; Q! H/ U* N3 J: S% A  }/ X) W
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}& Q0 O& e: r1 C8 O3 K, Y
\]/ g1 {7 x/ L# V
, T5 R; ^+ q- P
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
3 x" v8 @3 k# ]$ B" G9 T& A: T& R+ X, P" V8 \, V8 f
### 5. 模型精度检验
) F. I$ _* D2 G, T* f
; p5 A% e1 ?( x# [/ E' ]4 ^) t: t- **后验差比值 \(C\)**:
, ]) E+ F+ M$ \  \[& l$ X/ T  u! ~( Q
  C = \frac{S_Y^2}{S_X^2}
* y: K# y/ O. H- O  \]' t5 _9 w# |" @6 b& O$ |: b
  其中:2 q6 l+ l2 D  B: d
  - \(S_Y^2\):残差方差
* h) w; y# o7 |+ Y' d! [8 ~! F( |  - \(S_X^2\):历史数据方差
1 |2 h/ t" ]5 L$ k) K7 K
( M- k- `% z0 b2 ?8 F- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
6 v# Z$ p8 ]% ~  ?$ M8 x, j, p, y& f: c" W' c& b: q1 k

6 |  z/ w4 l/ H& n; v+ o6 n+ c! R; F7 M6 g+ d7 r

; ^: T& k" V( U3 z$ [) L) U+ W  \8 [  @
7 {1 r2 F0 F, X* X: y: ^  R

灰色预测模型Python代码.txt

1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






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