IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 人口预测模型 -> 正文阅读

[人工智能]人口预测模型

预测人口模型

利用灰色预测模型预测人口

应用

灰色预测模型(Gray Forecast Model)是通过少量的、不完全的信息,建立数学模型并做出预测的一种预测方法。是处理小样本(4个就可以)预测问题的有效工具,而对于小样本预测问题回归和神经网络的效果都不太理想。

灰色系统

我们称信息完全未确定的系统为黑色系统,称信息完全确定的系统为白色系统,灰色系统就是这介于这之间,一部分信息是已知的,另一部分信息是未知的,系统内各因素间有不确定的关系。

特点

  • 用灰色数学处理不确定量,使之量化。
  • 充分利用已知信息寻求系统的运动规律。
  • 灰色系统理论能处理贫信息系统。

灰色生成数列

灰色系统理论认为,尽管客观表象复杂,但总是有整体功能的,因此必然蕴含某种内在规律。关键在于如何选择适当的方式去挖掘和利用它。灰色系统时通过对原始数据的整理来寻求其变化规律的,这是一种就数据寻求数据的现实规律的途径,也就是灰色序列的生产。一切灰色序列都能通过某种生成弱化其随机性,显现其规律性。数据生成的常用方式有累加生成、累减生成和加权累加生成。常用的是累加生成。
设原始数据为设原始数据为 x ( 0 ) = ( x 0 ( 1 ) , x 0 ( 2 ) , … … , x 0 ( n ) ) x^{(0)}=\left(x^{0}(1), x^{0}(2), \ldots \ldots, x^{0}(n)\right) x(0)=(x0(1),x0(2),,x0(n))

1.累加生成

x 1 ( 1 ) = x 0 ( 1 ) x^{1}(1)=x^{0}(1) x1(1)=x0(1)

x 1 ( 2 ) = x 0 ( 1 ) + x 0 ( 2 ) x^{1}(2)=x^{0}(1)+x^{0}(2) x1(2)=x0(1)+x0(2)

x 1 ( 3 ) = x 0 ( 1 ) + x 0 ( 2 ) + x 0 ( 3 ) x^{1}(3)=x^{0}(1)+x^{0}(2)+x^{0}(3) x1(3)=x0(1)+x0(2)+x0(3)

x 1 ( n ) = x 0 ( 1 ) + x 0 ( 2 ) + … … + x 0 ( n ) x^{1}(n)=x^{0}(1)+x^{0}(2)+\ldots \ldots+x^{0}(n) x1(n)=x0(1)+x0(2)++x0(n)

累加的数据为 x ( 1 ) = ( x 1 ( 1 ) , x 1 ( 2 ) , … … , x 1 ( n ) ) x^{(1)}=\left(x^{1}(1), x^{1}(2), \ldots \ldots, x^{1}(n)\right) x(1)=(x1(1),x1(2),,x1(n))
例如有一组数据的的折线如下
在这里插入图片描述
此时不能看出数据有什么的规律,但经过累加生成后的结果如下
在这里插入图片描述
看起来就是一个递增的规律(这是20期某大坝变形位移的数据,顺水流方向的形变一定都是正的)

2.加权临值生成

z 0 ( 2 ) = a x 0 ( 2 ) + ( 1 ? a ) x 0 ( 1 ) z^{0}(2)=a x^{0}(2)+(1-a) x^{0}(1) z0(2)=ax0(2)+(1?a)x0(1)
z 0 ( 3 ) = a x 0 ( 3 ) + ( 1 ? a ) x 0 ( 2 ) z^{0}(3)=a x^{0}(3)+(1-a) x^{0}(2) z0(3)=ax0(3)+(1?a)x0(2)
z 0 ( 4 ) = a x 0 ( 4 ) + ( 1 ? a ) x 0 ( 3 ) z^{0}(4)=a x^{0}(4)+(1-a) x^{0}(3) z0(4)=ax0(4)+(1?a)x0(3)
… \ldots
z 1 ( n ) = a x 0 ( n ) + ( 1 ? a ) x 0 ( n ? 1 ) z^{1}(n)=a x^{0}(n)+(1-a) x^{0}(n-1) z1(n)=ax0(n)+(1?a)x0(n?1)

由此得到的数列称为邻值生成数,权 α \alpha α 也称为生成系数。 特别地,当生成系数 α = \alpha= α= 0.5 0.5 0.5 时,则称该数列为均值生成数,也称为等权邻值生成数。

灰色模型GM(1,1)

GM代表grey model(灰色模型),GM(1,1)是一阶微分方程模型。

1.数据检验

使用 G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 建模需要对数据进行检验,首先计算数列的级比

λ ( k ) = x 0 ( k ? 1 ) x 0 ( k ) \lambda(k)=\frac{x^{0}(k-1)}{x^{0}(k)} λ(k)=x0(k)x0(k?1)?, 其中 k = 2 , 3 , … , n k=2,3, \ldots, n k=2,3,,n

如果所有的级比都落在可容覆盖区间 X = ( e ? 2 n + 1 , e 2 n + 1 ) X=\left(e^{\frac{-2}{n+1}}, e^{\frac{2}{n+1}}\right) X=(en+1?2?,en+12?) 内,则数列 x ( 0 ) \left.x^{(} 0\right) x(0) 可以建立

G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 模型进行灰色预测。否则就需要对数据做适当的变换处理,如平移等。

2.构建灰色模型

定义 x ( 1 ) x^{(1)} x(1) 的灰导数为

d ( k ) = x 0 ( k ) = x 1 ( k ) ? x 1 ( k ? 1 ) d(k)=x^{0}(k)=x^{1}(k)-x^{1}(k-1) d(k)=x0(k)=x1(k)?x1(k?1)

z 1 ( k ) z^{1}(k) z1(k) 为数列 x 1 x^{1} x1 的邻值生成数列,即

z 1 ( k ) = a x 1 ( k ) + ( 1 ? a ) x 1 ( k ? 1 ) z^{1}(k)=a x^{1}(k)+(1-a) x^{1}(k-1) z1(k)=ax1(k)+(1?a)x1(k?1)

于是定义 G M ( 1 , 1 ) G M(1,1) GM(1,1) 的灰微分方程模型为

d ( k ) + a z 1 ( k ) = b d(k)+a z^{1}(k)=b d(k)+az1(k)=b

其中, a a a 称为发展系数, z 1 ( k ) z^{1}(k) z1(k) 称为白化背景值, b b b 称为灰作用量。接下来我们得到如 下方程组

x 0 ( 2 ) + a z 1 ( 2 ) = b x^{0}(2)+a z^{1}(2)=b x0(2)+az1(2)=b

x 0 ( 3 ) + a z 1 ( 3 ) = b x^{0}(3)+a z^{1}(3)=b x0(3)+az1(3)=b

x 0 ( n ) + a z 1 ( n ) = b x^{0}(n)+a z^{1}(n)=b x0(n)+az1(n)=b

按照矩阵的方法列出

$
u=\left[\begin{array}{l}
a \
b
\end{array}\right], Y=\left[\begin{array}{c}
x^{0}(2) \
x^{0}(3) \
\ldots \
x^{0}(n)
\end{array}\right], B=\left[\begin{array}{cc}
-z^{1}(2) & 1 \
-z^{1}(3) & 1 \
\cdots & \
-z^{1}(n) & 1
\end{array}\right]
$

G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 就可以表示为 Y = B u Y=B u Y=Bu ,接下来就是求 a a a b b b 的值,可以使用线性回归或者 ( B T B ) ? 1 B T Y \left(B^{T} B\right)^{-1} B^{T} Y (BTB)?1BTY (正规方程) 等按眧最小二乘的原埋来求出 a a a b b b 的值 (这里在列方程时 a a a 可以随便写一个 数,比如 1 2 \frac{1}{2} 21? ,这样 a a a ( 1 ? a ) (1-a) (1?a) 就一样的可以提出来方便写) 。

3.预测

相应的白化模型为

d x 1 ( t ) d t + a x 1 ( t ) = b \frac{d x^{1}(t)}{d t}+a x^{1}(t)=b dtdx1(t)?+ax1(t)=b

由此得到 x 1 ( t ) x^{1}(t) x1(t) 的解为

x 1 ( t ) = ( x 0 ( 1 ) ? b a ) e ? a ( t ? 1 ) + b a x^{1}(t)=\left(x^{0}(1)-\frac{b}{a}\right) e^{-a(t-1)}+\frac{b}{a} x1(t)=(x0(1)?ab?)e?a(t?1)+ab?

t + 1 = t t+1=t t+1=t

x 1 ( t + 1 ) = ( x 0 ( 1 ) ? b a ) e ? a + b a x^{1}(t+1)=\left(x^{0}(1)-\frac{b}{a}\right) e^{-a}+\frac{b}{a} x1(t+1)=(x0(1)?ab?)e?a+ab?, 其中 k = 1 , 2 , 3 … , n ? 1 k=1,2,3 \ldots, n-1 k=1,2,3,n?1

这就是我们的预测值。

4.检验

灰色模型的精度检验一般有三种方法灰色模型的精度检验一般有三种方法,相对误差大小检验法,关联度检验法和后验差检验法。常用的为后验差检验法。

  1. 将预测的 x ^ 1 \hat{x}^{1} x^1 使用累减生成得到

    x ^ 0 \hat{x}^{0} x^0 x ^ 0 ( k ) = x ^ 1 ( k ) ? x ^ 1 ( k ? 1 ) \hat{x}^{0}(k)=\hat{x}^{1}(k)-\hat{x}^{1}(k-1) x^0(k)=x^1(k)?x^1(k?1), 其中 k = 2 , 3 , … , n k=2,3, \ldots, n k=2,3,,n

  2. 计算残差
    e ( k ) = x 0 ( k ) ? x ^ 0 ( k ) e(k)=x^{0}(k)-\hat{x}^{0}(k) e(k)=x0(k)?x^0(k), 其中 k = 1 , 2 , … , n k=1,2, \ldots, n k=1,2,,n

  3. 计算原始序列 x 0 x^{0} x0 的方差 S 1 S_{1} S1? 和残差 e e e 的方差 S 2 S_{2} S2?
    S 1 = 1 n ∑ k = 1 n ( x 0 ( k ) ? x ˉ ) 2 S_{1}=\frac{1}{n} \sum_{k=1}^{n}\left(x^{0}(k)-\bar{x}\right)^{2} S1?=n1?k=1n?(x0(k)?xˉ)2 S 2 = 1 n ∑ k = 1 n ( e ( k ) ? e ˉ ) 2 S_{2}=\frac{1}{n} \sum_{k=1}^{n}(e(k)-\bar{e})^{2} S2?=n1?k=1n?(e(k)?eˉ)2

  4. 计算后验差比
    C = S 2 S 1 C=\frac{S_{2}}{S_{1}} C=S1?S2??

  5. 查表观察效果

模型精度等级均方差比值C
1 级(好)C<=0.35
2 级(合格)C<=0.5&c>0.35
3 级(勉强)C<=0.65&c>0.5
4 级(不合格)C>0.65

灰色预测模型预测人口

1.输入数据

从国家统计局获取十年的人口数据

人口数据年份
1276272011
1284532012
1292272013
1299882014
1307562015
1314482016
1321292017
1328022018
1334502019
1340912020

采用灰色预测模型预估的后十年的人口数据

人口数据(万人)年份预测数据(万人)误差率
12762720011276270.000%
1284532002128575.4160.095%
1292272003129265.65770.030%
1299882004129959.60490.022%
1307562005130657.27740.076%
1314482006131358.69540.068%
1321292007132063.87880.049%
1328022008132772.84790.022%
1334502009133485.6230.027%
1340912010134202.22450.083%
1349162011134922.67310.005%
1359222012135646.98930.202%
1367262013136375.19390.257%
1376462014137107.30770.391%
1383262015137843.35190.349%
1392322016138583.34740.466%
1400112017139327.31550.488%
1405412018140075.27740.331%
1410082019140827.25480.128%
1412122020141583.2690.263%

误差率均在1%以下,效果很好。

以2011-2020年数据预测未来十年的人口数据

年份人口数目(万人)
2021142440.9
2022143150.2
2023143863.1
2024144579.5
2025145299.5
2026146023
2027146750.2
2028147481
2029148215.5
2030148953.6

image-20211212205444623

近似为一条直线,但根据国家统计局预测,我国人口将在10年内迎来拐点。

故更换预测模型。

按自然增长率预测

自然增长率数据

年份自然增长率
20116.13
20127.43
20135.9
20146.71
20154.93
20166.53
20175.58
20183.78
20193.32
20201.45

绘制自然增长率散点图

image-20211212210015318

散点图没有呈现适合灰度模型的性质(指数型),且波动较大,尝试运用灰度模型,部分输出为(舍去了预测数据)

该数据未通过检验
a=[0.10967811]
b=[8.69394742]

2级,效果合格

数据未经过检验,故不采用灰度模型预测自然生产率。

运用SPSS对自然增长率进行曲线估算分析

运用曲线估算分析,分析哪种模型适合对人口进行预测。

曲线估算分析结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kSJ9iqM6-1639318859800)(https://s2.loli.net/2021/12/12/YcnwZG7IEJ1OzVd.png)]

image-20211212215759064

其对数、二次、三次、复合、幂、指数函数的拟合显著性都低于0.05,均可采用,且二次函数最可信。

此处选择二次函数,所得未来5年的自然增长率如下:

年份自然增长率(‰)
20210.202
2022-1.462
2023-3.318
2024-5.366
2025-7.606

根据自然增长率预估未来5年人口

年份人口及预测人口(万人)
2021141240.5
2022141034
2023140566.1
2024139811.8
2025138748.4

image-20211212213636736

人口转折点在2022年。

灰色预测模型python代码

# 灰色模型预测

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dir = 'C:\\Users\\shuai\\Desktop\\工程统计学\\讨论课'

data = pd.read_csv(dir+'\\test.csv')
data = np.array(data['pdata'])
lens = len(data)  # 数据量

# 数据检验
## 计算级比
lambds = []
for i in range(1, lens):
    lambds.append(data[i-1]/data[i])
## 计算区间
X_min = np.e**(-2/(lens+1))
X_max = np.e**(2/(lens+1))
## 检验
is_ok = True
for lambd in lambds:
    if (lambd < X_min or lambd > X_max):
        is_ok = False
if (is_ok == False):
    print('该数据未通过检验')
else:
    print('该数据通过检验')

# 构建灰色模型GM(1,1)
## 累加数列
data_1 = []
data_1.append(data[0])
for i in range(1, lens):
    data_1.append(data_1[i-1]+data[i])
## 灰导数及临值生成数列
ds = []
zs = []
for i in range(1, lens):
    ds.append(data[i])
    zs.append(-1/2*(data_1[i-1]+data_1[i]))
## 求a、b
B = np.array(zs).reshape(lens-1,1)
one = np.ones(lens-1)
B = np.c_[B, one]  # 加上一列1
Y = np.array(ds).reshape(lens-1,1)
a, b = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
print('a='+str(a))
print('b='+str(b))

# 预测
def func(k):
    c = b/a
    return (data[0]-c)*(np.e**(-a*k))+c
data_1_hat = []  # 累加预测值
data_0_hat = []  # 原始预测值
data_1_hat.append(func(0))
data_0_hat.append(data_1_hat[0])
for i in range(1, lens+10):  # 多预测10次
    data_1_hat.append(func(i))
    data_0_hat.append(data_1_hat[i]-data_1_hat[i-1])
print('预测值为:')
for i in data_0_hat:
    print(i)

# 模型检验
## 预测结果方差
data_h = np.array(data_0_hat[0:10]).T
sum_h = data_h.sum()
mean_h = sum_h/lens
S1 = np.sum((data_h-mean_h)**2)/lens
## 残差方差
e = data - data_h
sum_e = e.sum()
mean_e = sum_e/lens
S2 = np.sum((e-mean_e)**2)/lens
## 后验差比
C = S2/S1
## 结果
if (C <= 0.35):
    print('1级,效果好')
elif (C <= 0.5 and C >= 0.35):
    print('2级,效果合格')
elif (C <= 0.65 and C >= 0.5):
    print('3级,效果勉强')
else:
    print('4级,效果不合格')

# 画图
plt.figure(figsize=(9, 4), dpi=100)
x1 = np.linspace(1, 10, 10)
x2 = np.linspace(1, 20, 20)
plt.subplot(121)
plt.title('x^0')
plt.plot(x2, data_0_hat, 'r--', marker='*')
plt.scatter(x1, data, marker='^')
plt.subplot(122)
plt.title('x^1')
plt.plot(x2, data_1_hat, 'r--', marker='*')
plt.scatter(x1, data_1, marker='^')
plt.show()

输出结果如下

该数据通过检验
a=[-0.00535402]
b=[127548.20761512]
预测值为:
[127627.]
[128575.41598519]
[129265.6576876]
[129959.60486981]
[130657.27742425]
[131358.69535014]
[132063.87875406]
[132772.84785051]
[133485.62296254]
[134202.22452229]
[134922.67307159]
[135646.98926251]
[136375.19385806]
[137107.30773265]
[137843.35187279]
[138583.34737763]
[139327.31545959]
[140075.277445]
[140827.25477463]
[141583.26900437]
1级,效果好

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:48:58  更:2021-12-13 12:50:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:25:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码