一、前言:
白色系統:指一個系統的的內部特征是完全可以認知的,即系統的信息完全公開。
黑色系統:指一個系統的內部信息對外界來說是一無所知的,只能通過它與外界的聯系來加以觀測研究。
灰色系統:一部分的信息是已知的,另一部分是未知的,系統內各因素間有不確定的關系
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)
藍色線是真實值,橙色線是預測值