欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python灰色預(yù)測法的具體使用

 更新時(shí)間:2022年03月04日 09:32:09   作者:洋洋菜鳥  
灰色系統(tǒng)理論認(rèn)為對既含有已知信息又含有未知或非確定信息的系統(tǒng)進(jìn)行預(yù)測,本文就介紹了python灰色預(yù)測法的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下

1.簡介

        灰色系統(tǒng)理論認(rèn)為對既含有已知信息又含有未知或非確定信息的系統(tǒng)進(jìn)行預(yù)測,就是對在一定方位內(nèi)變化的、與時(shí)間有關(guān)的灰色過程的預(yù)測。盡管過程中所顯示的現(xiàn)象是隨機(jī)的、雜亂無章的,但畢竟是有序的、有界的,因此這一數(shù)據(jù)集合具備潛在的規(guī)律,灰色預(yù)測就是利用這種規(guī)律建立灰色模型對灰色系統(tǒng)進(jìn)行預(yù)測。

        灰色預(yù)測通過鑒別系統(tǒng)因素之間發(fā)展趨勢的相異程度,即進(jìn)行關(guān)聯(lián)分析,并對原始數(shù)據(jù)進(jìn)行生成處理來尋找系統(tǒng)變動的規(guī)律,生成有較強(qiáng)規(guī)律性的數(shù)據(jù)序列,然后建立相應(yīng)的微分方程模型,從而預(yù)測事物未來發(fā)展趨勢的狀況。其用等時(shí)距觀測到的反應(yīng)預(yù)測對象特征的一系列數(shù)量值構(gòu)造灰色預(yù)測模型,預(yù)測未來某一時(shí)刻的特征量,或達(dá)到某一特征量的時(shí)間。

2.算法詳解

2.1 生成累加數(shù)據(jù)

2.2  累加后的數(shù)據(jù)表達(dá)式

2.3 求解2.2的未知參數(shù)

3.實(shí)例分析

現(xiàn)有1997—2002年各項(xiàng)指標(biāo)相關(guān)統(tǒng)計(jì)數(shù)據(jù)如下表:

年份

第一產(chǎn)業(yè)

GDP

消費(fèi)
價(jià)格指數(shù)

第三產(chǎn)業(yè)

GDP

1997

72.03

241.2

1592.74

1998

73.84

241.2

1855.36

1999

74.49

244.8

2129.60

2000

76.68

250.9

2486.86

2001

78.00

250.9

2728.94

2002

79.68

252.2

3038.90

用灰色預(yù)測方法預(yù)測2003—2009年各項(xiàng)指標(biāo)的數(shù)據(jù)。且已知實(shí)際的預(yù)測數(shù)據(jù)如下:將預(yù)測數(shù)據(jù)與實(shí)際數(shù)據(jù)進(jìn)行比較

年份

第一產(chǎn)業(yè)GDP

居民消費(fèi)價(jià)格指數(shù)

第三產(chǎn)業(yè)GDP

2003

81.21

256.5

3458.05

2004

82.84

259.4

3900.27

2005

84.5

262.4

4399.06

2006

86.19

265.3

4961.62

2007

87.92

268.3

5596.13

2008

89.69

271.4

6311.79

2009

91.49

274.5

7118.96

3.1 導(dǎo)入數(shù)據(jù)

#原數(shù)據(jù)
data=np.array([[72.03,241.2,1592.74],[73.84,241.2,1855.36],[74.49,244.8,2129.60],[76.68,250.9,2486.86],[78.00,250.9,2728.94],[79.68,252.2,3038.90]])
#要預(yù)測數(shù)據(jù)的真實(shí)值
data_T=np.array([[81.21,256.5,3458.05],[82.84,259.4,3900.27],[84.5,262.4,4399.06],[86.19,265.3,4961.62],[87.92,268.3,5596.1],[89.69,271.4, 6311.79],[91.49,274.5,7118.96]])

返回結(jié)果,請自行打印查看

3.2 進(jìn)行累加數(shù)據(jù)

#累加數(shù)據(jù)
data1=np.cumsum(data.T,1) #按列相加
print(data1)

返回:

 3.3 求解系數(shù)

[m,n]=data1.shape #得到行數(shù)和列數(shù) m=3,n=6
#對這三列分別進(jìn)行預(yù)測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預(yù)測年份數(shù)據(jù)
X_p=np.array(X_p)
X_sta=X[0]-1#最開始參考數(shù)據(jù)
#求解未知數(shù)
for j in range(3):
    B=np.zeros((n-1,2))
    for i in range(n-1):
        B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])
        B[i,1]=1
    Y=data.T[j,1:7]
    a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)
    print(a_u)
    #進(jìn)行數(shù)據(jù)預(yù)測
    a=a_u[0]
    u=a_u[1]

返回:

 得到3對 a和u

3.4 預(yù)測數(shù)據(jù)及對比

需在3.3的基礎(chǔ)上進(jìn)行預(yù)測

[m,n]=data1.shape #得到行數(shù)和列數(shù) m=3,n=6
#對這三列分別進(jìn)行預(yù)測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預(yù)測年份數(shù)據(jù)
X_p=np.array(X_p)
X_sta=X[0]-1#最開始參考數(shù)據(jù)
#求解未知數(shù)
for j in range(3):
    B=np.zeros((n-1,2))
    for i in range(n-1):
        B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])
        B[i,1]=1
    Y=data.T[j,1:7]
    a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)
#     print(a_u)
    #進(jìn)行數(shù)據(jù)預(yù)測
    a=a_u[0]
    u=a_u[1]
    T=[i for i in range(1997,2010)]
    T=np.array(T)
    data_p=(data1[0,j]-u/a)*np.exp(-a*(T-X_sta-1))+u/a #累加數(shù)據(jù)
#     print(data_p)
    data_p1=data_p
    data_p1[1:len(data_p)]=data_p1[1:len(data_p)]-data_p1[0:len(data_p)-1]
#     print(data_p1)
    title_str=['第一產(chǎn)業(yè)GDP預(yù)測','居民消費(fèi)價(jià)格指數(shù)預(yù)測','第三產(chǎn)業(yè)GDP預(yù)測']
    plt.subplot(221+j)
    data_n=data_p1
    plt.scatter(range(1997,2003),data[:,j])
    plt.plot(range(1997,2003),data_n[X-X_sta])
    plt.scatter(range(2003,2010),data_T[:,j])
    plt. plot(range(2003,2010),data_n[X_p-X_sta-1])
#     plt.title(title_str[j])
    plt.legend(['實(shí)際原數(shù)據(jù)','擬合數(shù)據(jù)','預(yù)測參考數(shù)據(jù)','預(yù)測數(shù)據(jù)'])
    y_n=data_n[X_p-X_sta-1].T
    y=data_T[:,j]
    wucha=sum(abs(y_n-y)/y)/len(y)
    titlestr1=[title_str[j],'預(yù)測相對誤差:',wucha]
    plt.title(titlestr1)
    plt.show()

返回:

完整代碼

import numpy as np
import matplotlib.pyplot as plt
import math
 
# 解決圖標(biāo)題中文亂碼問題
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默認(rèn)字體
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負(fù)號'-'顯示為方塊的問題
 
#原數(shù)據(jù)
data=np.array([[72.03,241.2,1592.74],[73.84,241.2,1855.36],[74.49,244.8,2129.60],[76.68,250.9,2486.86],[78.00,250.9,2728.94],[79.68,252.2,3038.90]])
#要預(yù)測數(shù)據(jù)的真實(shí)值
data_T=np.array([[81.21,256.5,3458.05],[82.84,259.4,3900.27],[84.5,262.4,4399.06],[86.19,265.3,4961.62],[87.92,268.3,5596.1],[89.69,271.4, 6311.79],[91.49,274.5,7118.96]])
 
#累加數(shù)據(jù)
data1=np.cumsum(data.T,1)
print(data1)
 
[m,n]=data1.shape #得到行數(shù)和列數(shù) m=3,n=6
#對這三列分別進(jìn)行預(yù)測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預(yù)測年份數(shù)據(jù)
X_p=np.array(X_p)
X_sta=X[0]-1#最開始參考數(shù)據(jù)
#求解未知數(shù)
for j in range(3):
    B=np.zeros((n-1,2))
    for i in range(n-1):
        B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])
        B[i,1]=1
    Y=data.T[j,1:7]
    a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)
#     print(a_u)
    #進(jìn)行數(shù)據(jù)預(yù)測
    a=a_u[0]
    u=a_u[1]
    T=[i for i in range(1997,2010)]
    T=np.array(T)
    data_p=(data1[0,j]-u/a)*np.exp(-a*(T-X_sta-1))+u/a #累加數(shù)據(jù)
#     print(data_p)
    data_p1=data_p
    data_p1[1:len(data_p)]=data_p1[1:len(data_p)]-data_p1[0:len(data_p)-1]
#     print(data_p1)
    title_str=['第一產(chǎn)業(yè)GDP預(yù)測','居民消費(fèi)價(jià)格指數(shù)預(yù)測','第三產(chǎn)業(yè)GDP預(yù)測']
    plt.subplot(221+j)
    data_n=data_p1
    plt.scatter(range(1997,2003),data[:,j])
    plt.plot(range(1997,2003),data_n[X-X_sta])
    plt.scatter(range(2003,2010),data_T[:,j])
    plt. plot(range(2003,2010),data_n[X_p-X_sta-1])
#     plt.title(title_str[j])
    plt.legend(['實(shí)際原數(shù)據(jù)','擬合數(shù)據(jù)','預(yù)測參考數(shù)據(jù)','預(yù)測數(shù)據(jù)'])
    y_n=data_n[X_p-X_sta-1].T
    y=data_T[:,j]
    wucha=sum(abs(y_n-y)/y)/len(y)
    titlestr1=[title_str[j],'預(yù)測相對誤差:',wucha]
    plt.title(titlestr1)
    plt.show()

到此這篇關(guān)于python灰色預(yù)測法的具體使用的文章就介紹到這了,更多相關(guān)python灰色預(yù)測法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論