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

python灰色預測法的具體使用

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

1.簡介

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

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

2.算法詳解

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

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

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

3.實例分析

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

年份

第一產業(yè)

GDP

消費
價格指數(shù)

第三產業(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

用灰色預測方法預測2003—2009年各項指標的數(shù)據(jù)。且已知實際的預測數(shù)據(jù)如下:將預測數(shù)據(jù)與實際數(shù)據(jù)進行比較

年份

第一產業(yè)GDP

居民消費價格指數(shù)

第三產業(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 導入數(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]])
#要預測數(shù)據(jù)的真實值
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]])

返回結果,請自行打印查看

3.2 進行累加數(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
#對這三列分別進行預測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預測年份數(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)
    #進行數(shù)據(jù)預測
    a=a_u[0]
    u=a_u[1]

返回:

 得到3對 a和u

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

需在3.3的基礎上進行預測

[m,n]=data1.shape #得到行數(shù)和列數(shù) m=3,n=6
#對這三列分別進行預測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預測年份數(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)
    #進行數(shù)據(jù)預測
    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=['第一產業(yè)GDP預測','居民消費價格指數(shù)預測','第三產業(yè)GDP預測']
    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ù)據(jù)','擬合數(shù)據(jù)','預測參考數(shù)據(jù)','預測數(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],'預測相對誤差:',wucha]
    plt.title(titlestr1)
    plt.show()

返回:

完整代碼

import numpy as np
import matplotlib.pyplot as plt
import math
 
# 解決圖標題中文亂碼問題
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題
 
#原數(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]])
#要預測數(shù)據(jù)的真實值
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
#對這三列分別進行預測
X=[i for i in range(1997,2003)]#已知年份數(shù)據(jù)
X=np.array(X)
X_p=[i for i in range(2003,2010)]#預測年份數(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)
    #進行數(shù)據(jù)預測
    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=['第一產業(yè)GDP預測','居民消費價格指數(shù)預測','第三產業(yè)GDP預測']
    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ù)據(jù)','擬合數(shù)據(jù)','預測參考數(shù)據(jù)','預測數(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],'預測相對誤差:',wucha]
    plt.title(titlestr1)
    plt.show()

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

相關文章

最新評論