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 | 消費 | 第三產業(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Pytorch實現(xiàn)tensor序列化和并行化的示例詳解
這篇文章主要介紹了Pytorch實現(xiàn)tensor序列化和并行化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,感興趣的同學們下面隨著小編來一起學習學習吧2023-12-12python 數(shù)據(jù)分析實現(xiàn)長寬格式的轉換
這篇文章主要介紹了python 數(shù)據(jù)分析實現(xiàn)長寬格式的轉換,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python 實現(xiàn)在tkinter中動態(tài)顯示label圖片的方法
今天小編就為大家分享一篇python 實現(xiàn)在tkinter中動態(tài)顯示label圖片的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python+Django+MySQL實現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實現(xiàn)基于Web版的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05python調用百度REST API實現(xiàn)語音識別
這篇文章主要為大家詳細介紹了python調用百度REST API實現(xiàn)語音識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08淺談pytorch卷積核大小的設置對全連接神經(jīng)元的影響
今天小編就為大家分享一篇淺談pytorch卷積核大小的設置對全連接神經(jīng)元的影響,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01使用Python自動化Microsoft Excel和Word的操作方法
這篇文章主要介紹了使用Python自動化Microsoft Excel和Word,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04深入探究python中Pandas庫處理缺失數(shù)據(jù)和數(shù)據(jù)聚合
在本篇文章中,我們將深入探討Pandas庫中兩個重要的數(shù)據(jù)處理功能:處理缺失數(shù)據(jù)和數(shù)據(jù)聚合,文中有詳細的代碼示例,對我們的學習或工作有一定的幫助,需要的朋友可以參考下2023-07-07