python使用GM11


一、前言:

白色系統:指一個系統的的內部特征是完全可以認知的,即系統的信息完全公開。

黑色系統:指一個系統的內部信息對外界來說是一無所知的,只能通過它與外界的聯系來加以觀測研究。

灰色系統:一部分的信息是已知的,另一部分是未知的,系統內各因素間有不確定的關系

GM11就是灰色系統,對單調性曲線有較好的預測。

二、python使用GM11

參考:https://github.com/judesmorning/python-GreyTheory

1、首先下載對應的模塊

pip3 install greytheory

2、代碼

 

from greytheory import GreyTheory
import matplotlib.pyplot as plt
import numpy as np

def predict(data_list):
    grey = GreyTheory()
    gm11 = grey.gm11 # GM11
    # To try customized alpha for IAGO of Z.
    gm11.alpha = 0.5
    gm11.convolution = True  # Convolutional forecasting of GM11. 卷積
    gm11.stride = 1 # 采樣個數,1代表每個數都參與預測
    gm11.length = 4 # 卷積幾個數
    for num in data_list:
        gm11.add_pattern(num, num) #第一個參數是參數歷史取值,第二個是每個參數的標簽,沒有啥用
    gm11.forecast()
    for forecast in gm11.analyzed_results: #從預測結果里判斷,如果不等於_TAG_FORECAST_HISTORY則代表是預測值,因為只預測一個,所以預測結果列表里只有一個是預測值,其他可能是卷積值和歷史值對應的預測值
        if forecast.tag != gm11._TAG_FORECAST_HISTORY:
            res = forecast.forecast_value
    print("result:", res)

    X1=np.linspace(0,len(gm11.patterns),len(gm11.patterns),endpoint=True)
    plt.plot(X1,gm11.patterns)

    predict_list = []
    for num in gm11.analyzed_results:
        predict_list.append(num.forecast_value)
    # print("predict_list:",predict_list)
    X2=np.linspace(0,len(predict_list),len(predict_list),endpoint=True)
    plt.plot(X2,predict_list)
    plt.show()


if __name__=="__main__":
    # 1949~2018人口,預測2019年人口
    a="54167, 55196, 56300, 61465, 66207, 72538, 82992, 85229, 87177, 89211, 90859, 92420, 93717, 94974, 96259, 97542, 98705, 100072, 101654, 103008, 104357, 105851, 107507, 109300, 111026, 112704, 114333, 115823, 117171,118517, 119850, 121121, 122389, 123626, 124761, 125786, 126743, 127627, 128453, 129227, 129988, 130756, 131448, 132129, 132802, 133450, 134091, 134735, 135404, 136072, 136782, 137462, 138271, 139008, 139538"
    list = [float(i) for i in a.split(",")]  # 按照逗號分隔開並轉為float
    predict(list)

 

 

 藍色線是真實值,橙色線是預測值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM