QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2230|回复: 0
打印 上一主题 下一主题

使用 Logistic 模型拟合人口数据

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:- ?& g$ W; g+ Y2 X! r9 k9 ]1 }
9 q1 k# K& x  h( M$ g& `5 S
1.导入模块:
* e- i1 y, [: f/ D3 j* C; `; D( m" G+ g' B0 j1 W* s
   import numpy as np  I; X, }( _: t, i; N  A# z: }
   import pandas as pd
# ~9 {( y# H, K3 F   from scipy.optimize import curve_fit4 `! e4 l+ _' U# d
' Q+ V$ E3 J2 `1 ?6 V

6 x" A9 {8 j8 K- Z4 i3 G) s2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
2 V9 Q5 u0 d& g/ `4 w$ I
: r9 C0 K+ f0 `0 d; B, V7 s" g5 i  n+ O! T) R$ I$ K; e
3.准备数据:) [: q# F' {8 M9 E# r! i. {
) ~# w0 F6 p7 ?+ n5 b
   df = pd.DataFrame({! m6 h0 ?$ L+ r: [# w6 [' Z
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
( y- M; ]) @7 q3 w       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],% t! `, v4 e5 M$ u9 m+ H# ]
   })& K$ b, n! k( t$ i9 {7 \
   x0 = float(df['population'][0])2 t/ m' N" u* c% Q
   t0 = float(df['year'][0])
7 S7 [+ R' d, Z3 B* s; u' E$ U' L" Y) G* g
, X1 }. k4 r# z1 z' l
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
9 x7 }' d3 W2 ]! v' ]5.提取了初始年份和初始人口数。/ C: x) S0 J& V6 f* c
  F( M" \$ ~6 E5 M0 X2 t( D7 e& N

8 C% ]2 q2 t1 U& G6.定义 Logistic 模型函数:, x; q# r3 x1 b1 Y

8 N% e: x+ P# q/ T   def x(t, r, xm):
! f& _5 D9 o$ P       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))2 \4 N* F% i2 C6 M5 B" y$ O0 J  d

. l0 l( x6 x# \& {$ ?2 G$ Z4 x; C5 m% c
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。* J: }& i: n0 H* F- A
1 A! H% |/ F4 V6 w: q

4 B, X: U; o- t8.拟合参数:
) i/ d- }: A  d* ?+ z* c8 Y4 m% T( ^
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))+ o( V+ Z. K9 D( }. F# S5 o5 j
   r, xm = popt[0], popt[1]0 i# H2 x6 u6 t, Q" U
  L1 N: I+ {5 b
  G% }' e9 p7 M" Y- X( g# g
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
) ^. P8 q$ ?1 Q! g; O6 N3 Z* l
) B4 i5 t7 t+ E  w8 U: }/ i9 w
. d" A, l9 k# m. l8 q10.预测 1900 年人口:' O/ z; k7 P* z
$ I/ U- o9 m6 J2 q9 i: l- ?, u
   print('population in 1900 =', x(1900, r, xm))
) N& K4 ], O& f# N/ U
8 U* w8 B8 _1 ^( |# ]& n4 n7 Z9 B& Y" ~6 z0 U
11.使用拟合的参数预测了 1900 年的人口数。
4 q' P% P- B  q+ U$ O8 N
% V- a/ s- K* f! X7 s8 e* M, a7 a2 L4 f  W2 Z
12.绘制预测曲线:% S6 W$ O! S4 p& u9 M) O

+ e1 B0 J( O7 g6 E) ?; r% T   year = np.linspace(1790, 2000, 21); {8 ~/ O, V5 L  Z1 J) j
   population = [x(each, r, xm) for each in year]7 O% l5 e8 o: ~; h
   plt.scatter(df['year'], df['population'], label='actual')
8 Q  ]. k2 H; i  ?   plt.plot(year, population, label='predict', color='coral')* v2 {6 }) s$ S& c! H+ o1 ]
   plt.legend()+ s+ o, C' J" k5 u* ]

, ]( z1 H$ G4 }2 k. q$ l) ~/ L  x3 ]; l6 Z  M8 s& s
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
+ g1 ~8 V  B8 j9 N5 o5 s& K! d14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。( g/ D# a- o( w$ }  X
% N: ]+ Z2 b' Y# m0 R( {
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
- y8 }/ [2 q6 R, L" `
" u0 Q; Q) v) u4 m& v3 b* s
7 z( p( N* s2 V) a# L

13.logistic_model.py

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-9 08:12 , Processed in 0.447782 second(s), 55 queries .

回顶部