python灰色預(yù)測法的具體使用
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) | 第三產(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)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型
- Python編程實(shí)現(xiàn)使用線性回歸預(yù)測數(shù)據(jù)
- Python分析彩票記錄并預(yù)測中獎(jiǎng)號碼過程詳解
- 詳解用Python進(jìn)行時(shí)間序列預(yù)測的7種方法
- python構(gòu)建指數(shù)平滑預(yù)測模型示例
- 使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測的實(shí)現(xiàn)
- 使用Python進(jìn)行體育競技分析(預(yù)測球隊(duì)成績)
- python數(shù)據(jù)分析之用sklearn預(yù)測糖尿病
相關(guān)文章
Pytorch實(shí)現(xiàn)tensor序列化和并行化的示例詳解
這篇文章主要介紹了Pytorch實(shí)現(xiàn)tensor序列化和并行化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的同學(xué)們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12python 數(shù)據(jù)分析實(shí)現(xiàn)長寬格式的轉(zhuǎn)換
這篇文章主要介紹了python 數(shù)據(jù)分析實(shí)現(xiàn)長寬格式的轉(zhuǎn)換,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python 實(shí)現(xiàn)在tkinter中動態(tài)顯示label圖片的方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)在tkinter中動態(tài)顯示label圖片的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05python調(diào)用百度REST API實(shí)現(xiàn)語音識別
這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度REST API實(shí)現(xiàn)語音識別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08淺談pytorch卷積核大小的設(shè)置對全連接神經(jīng)元的影響
今天小編就為大家分享一篇淺談pytorch卷積核大小的設(shè)置對全連接神經(jīng)元的影響,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01使用Python自動化Microsoft Excel和Word的操作方法
這篇文章主要介紹了使用Python自動化Microsoft Excel和Word,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04深入探究python中Pandas庫處理缺失數(shù)據(jù)和數(shù)據(jù)聚合
在本篇文章中,我們將深入探討Pandas庫中兩個(gè)重要的數(shù)據(jù)處理功能:處理缺失數(shù)據(jù)和數(shù)據(jù)聚合,文中有詳細(xì)的代碼示例,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-07-07