QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
7 X: O% r8 s4 H+ [9 \
( k: H1 W2 U$ e. P+ A3 H( i1.导入模块:" n1 D% i+ C& I9 k+ F* l$ W
2 j% W0 v0 e* c7 H  K  `3 P
   import numpy as np$ p3 E8 M0 y% p; I
   import pandas as pd
* v% ~3 }- E' C( K" ^   from scipy.optimize import curve_fit
; J1 h7 o5 Z( J4 T$ A# m
7 j* U, v4 e7 d: {: u: H' u
/ T/ \0 C5 T& A. z: ]/ R2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。+ N. R  L/ D! V0 }

, W: l0 Z5 L1 c5 Q5 ^" _. I2 m/ l/ P* T4 r+ N$ k; x) J- ^! s
3.准备数据:
( g8 V  a9 E( ]9 I" j! ^/ B0 u2 ]4 R3 `
   df = pd.DataFrame({
2 _# x# M, I5 i# q1 @       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
) j# J' U3 \: _       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
; _' k( ?0 M' ?( C   }): K5 `( L& \5 [1 r
   x0 = float(df['population'][0])/ F0 M% ?- k8 u% v" w% p1 r& ?1 z
   t0 = float(df['year'][0])
; ?5 _. V- h, U  R- X8 t- A& s
4 V5 v) M/ y0 F2 z0 i- Q1 Z
/ W8 l5 H- \$ F2 Q2 M; p4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
, R; v' h$ S5 i' j5 s& u2 y3 c5.提取了初始年份和初始人口数。
% s# R" |) S- ]( N; s
- W: Y0 V; r% Y$ J) Y% R' a- X1 w1 _0 C, l
6.定义 Logistic 模型函数:- n. P, Z6 `3 Q1 N  |8 c* C

: o7 S1 N9 [9 t5 D   def x(t, r, xm):
! Y7 p. |8 `7 y! V) X6 }       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
( W: Z/ }" a2 {7 J( D# G* a/ J# M4 z% k! m* ~

& C' z% {3 n! r3 u7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
' a9 r' Z9 ~! H5 R6 i4 l8 J0 E- e. r) F9 G3 V! p3 M0 D3 k

5 ]8 n+ d8 R/ Y4 p; H8.拟合参数:
  J" ~$ Z' G! R
8 ?) m0 U( @4 e( H$ r' W; G8 T   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))% p4 u1 \; \& o- w4 b
   r, xm = popt[0], popt[1]
" [2 c* f) J  i  F
% Z* r1 C4 k: h6 d
" p& [! C5 Q0 L3 h4 v9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。, i2 k3 r# E3 e3 H- f8 N/ m/ C  a
  C4 v8 c8 N3 l
2 H; @6 X  b; V7 Z0 Z
10.预测 1900 年人口:
: f; o0 d6 V8 I. ]; {. X4 t. Y4 k. v0 y  @  w
   print('population in 1900 =', x(1900, r, xm))
' H. t( H3 x4 ~/ ~+ p' o/ E$ ?) f& l0 C8 s3 Q) q7 C" W6 f

6 F/ R  X- o" H11.使用拟合的参数预测了 1900 年的人口数。
7 [0 `7 \3 m' D$ G2 K) a( u: H+ c* q+ j& P2 G- }  _
8 c' B3 D7 u, j" F8 E" r: W! `9 T
12.绘制预测曲线:
) e  H- y- B$ F- A3 ~. k1 A9 \
- @6 V6 ]" u6 x3 t5 o+ J) X   year = np.linspace(1790, 2000, 21)
% Y$ M8 x. F3 K* b: J- K   population = [x(each, r, xm) for each in year]. q9 S$ n' N4 T/ t# }; B
   plt.scatter(df['year'], df['population'], label='actual')! C) o! @& q$ x6 D
   plt.plot(year, population, label='predict', color='coral'). ~5 R- ?8 j9 T: h( d" k
   plt.legend()9 @! y: ^9 {5 J* v" q6 Z  l
  x7 Z6 F8 a" F% N* `' @' ~
7 M) D; P& l* @1 k( v6 b
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。8 S( D% s2 p. |
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。3 B5 A, j8 z2 p$ x" h
7 d( w) _$ L1 @8 U1 P9 B
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。& W2 V9 [5 r3 ?, c0 i- m4 e
! [% D0 o5 m. Z; r
* @& r, T/ X( W

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-26 00:38 , Processed in 0.440067 second(s), 55 queries .

回顶部