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

一文詳解Python灰色預(yù)測模型實(shí)現(xiàn)示例

 更新時(shí)間:2023年02月15日 10:35:49   作者:fanstuck  
這篇文章主要為大家介紹了Python灰色預(yù)測模型實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

博主參與過大大小小十次數(shù)學(xué)建模比賽,也獲得了不少建模獎(jiǎng)項(xiàng)。對(duì)于一些小批量樣本數(shù)據(jù)去做預(yù)測或者是評(píng)估其規(guī)律性的話,比較適合的模型一般都是選擇灰色預(yù)測模型。該模型解釋性強(qiáng)而且易于理解,建模手段也比較簡單。在一些不確定是否存在相關(guān)標(biāo)量或者是存在位置特征的時(shí)候,用灰色預(yù)測模型尤為明顯,牽扯太多變量時(shí)候可以以量曾量減的方式顯現(xiàn)其變化規(guī)律,是建模比較好用的算法和思路。但是首先我們要明白該模型的使用場景以及優(yōu)缺點(diǎn)才能更好的解釋建模的效果。故為接下來的美賽,我將把一些常用建模的模型和代碼補(bǔ)上。

一、模型理論

灰色預(yù)測模型是通過少量的、不完全的信息,建立數(shù)學(xué)模型做出預(yù)測的一種預(yù)測方法。是基于客觀事物的過去和現(xiàn)在的發(fā)展規(guī)律,借助于科學(xué)的方法對(duì)未來的發(fā)展趨勢和狀況進(jìn)行描述和分析,并形成科學(xué)的假設(shè)和判斷。

我們稱信息完全未確定的系統(tǒng)為黑色系統(tǒng),稱信息完全確定的系統(tǒng)為白色系統(tǒng),灰色系統(tǒng)就是這介于這之間,一部分信息是已知的,另一部分信息是未知的,系統(tǒng)內(nèi)各因素間有不確定的關(guān)系。

不知道大家知不知道白盒測試和黑盒測試,我們可以這樣通俗的理解,黑色系統(tǒng)就好比一個(gè)黑色的盒子你看不到里面裝著幾個(gè)小球,從里面拿出幾個(gè)小球或者是章魚都是未知數(shù)。而白色系統(tǒng)就像是透明的盒子,你能很清楚的看到里面是什么你想要拿什么出來拿多少個(gè)。而這個(gè)灰色系統(tǒng)介于他們之間,盒子是灰色的,只能模糊的看到一些小球,看不到幾個(gè)或者是有除了小球以外的其他東西。

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

特點(diǎn)

  • 用灰色數(shù)學(xué)處理不確定量,使之量化。
  • 充分利用已知信息尋求系統(tǒng)的運(yùn)動(dòng)規(guī)律。
  • 灰色系統(tǒng)理論能處理貧信息系統(tǒng)。

二、模型場景

1.預(yù)測種類

  • 灰色時(shí)間序列預(yù)測;即用觀察到的反映預(yù)測對(duì)象特征的時(shí)間序列來構(gòu)造灰色預(yù)測模型,預(yù)測未來某一時(shí)刻的特征量,或達(dá)到某一特征量的時(shí)間。
  • 畸變預(yù)測;即通過灰色模型預(yù)測異常值出現(xiàn)的時(shí)刻,預(yù)測異常值什么時(shí)候出現(xiàn)在特定時(shí)區(qū)內(nèi)。
  • 系統(tǒng)預(yù)測;通過對(duì)系統(tǒng)行為特征指標(biāo)建立一組相互關(guān)聯(lián)的灰色預(yù)測模型,預(yù)測系統(tǒng)中眾多變量間的相互協(xié)調(diào)關(guān)系的變化。
  • 拓?fù)漕A(yù)測;將原始數(shù)據(jù)作曲線,在曲線上按定值尋找該定值發(fā)生的所有時(shí)點(diǎn),并以該定值為框架構(gòu)成時(shí)點(diǎn)序列,然后建立模型預(yù)測該定值所發(fā)生的時(shí)點(diǎn)。

2.適用條件

灰色預(yù)測模型可針對(duì)數(shù)量非常少(比如僅4個(gè)),數(shù)據(jù)完整性和可靠性較低的數(shù)據(jù)序列進(jìn)行有效預(yù)測,其利用微分方程來充分挖掘數(shù)據(jù)的本質(zhì),建模所需信息少,精度較高,運(yùn)算簡便,易于檢驗(yàn),也不用考慮分布規(guī)律或變化趨勢等。但灰色預(yù)測模型一般只適用于短期預(yù)測,只適合指數(shù)增長的預(yù)測,比如人口數(shù)量,航班數(shù)量,用水量預(yù)測,工業(yè)產(chǎn)值預(yù)測等。

三、建模流程

總體建模流程可以參考:

1.級(jí)比校驗(yàn)

trong>數(shù)據(jù)累加和微分方程構(gòu)造

3.系數(shù)求解

數(shù)據(jù)向量Y:

 4.殘差檢驗(yàn)與級(jí)比偏差檢驗(yàn)

四、Python實(shí)例實(shí)現(xiàn)

我們通過得到的周數(shù)擁堵車輛數(shù)據(jù)進(jìn)行測試:

import numpy as np
import pandas as pd
from decimal import *
import matplotlib.pyplot as plt
def Grade_ratio_test(X0):
    lambds = [X0[i - 1] / X0[i] for i in range(1, len(X0))]
    X_min = np.e ** (-2 / (len(X0) + 1))
    X_max = np.e ** (2 / (len(X0) + 1))
    for lambd in lambds:
        if lambd < X_min or lambd > X_max:
            print('該數(shù)據(jù)未通過級(jí)比檢驗(yàn)')
            return False
    print('該數(shù)據(jù)通過級(jí)比檢驗(yàn)')
    return True
def model_train(X0_train):
    #AGO生成序列X1
    X1 = X0_train.cumsum()
    Z= (np.array([-0.5 * (X1[k - 1] + X1[k]) for k in range(1, len(X1))])).reshape(len(X1) - 1, 1)
    # 數(shù)據(jù)矩陣A、B
    A = (X0_train[1:]).reshape(len(Z), 1)
    B = np.hstack((Z, np.ones(len(Z)).reshape(len(Z), 1)))
    # 求灰參數(shù)
    a, u = np.linalg.inv(np.matmul(B.T, B)).dot(B.T).dot(A)
    u = Decimal(u[0])
    a = Decimal(a[0])
    print("灰參數(shù)a:", a, ",灰參數(shù)u:", u)
    return u,a
def model_predict(u,a,k,X0):
    predict_function =lambda k: (Decimal(X0[0]) - u / a) * np.exp(-a * k) + u / a 
    X1_hat = [float(predict_function(k)) for k in range(k)]
    X0_hat = np.diff(X1_hat)
    X0_hat = np.hstack((X1_hat[0], X0_hat))
    return X0_hat
'''
根據(jù)后驗(yàn)差比及小誤差概率判斷預(yù)測結(jié)果
:param X0_hat: 預(yù)測結(jié)果
:return:
'''
def result_evaluate(X0_hat,X0):
    S1 = np.std(X0, ddof=1)  # 原始數(shù)據(jù)樣本標(biāo)準(zhǔn)差
    S2 = np.std(X0 - X0_hat, ddof=1)  # 殘差數(shù)據(jù)樣本標(biāo)準(zhǔn)差
    C = S2 / S1  # 后驗(yàn)差比
    Pe = np.mean(X0 - X0_hat)
    temp = np.abs((X0 - X0_hat - Pe)) < 0.6745 * S1    
    p = np.count_nonzero(temp) / len(X0)  # 計(jì)算小誤差概率
    print("原數(shù)據(jù)樣本標(biāo)準(zhǔn)差:", S1)
    print("殘差樣本標(biāo)準(zhǔn)差:", S2)
    print("后驗(yàn)差比:", C)
    print("小誤差概率p:", p)
if __name__ == '__main__':
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 步驟一(替換sans-serif字體)
    plt.rcParams['axes.unicode_minus'] = False  # 步驟二(解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問題)
        # 原始數(shù)據(jù)X
    data = pd.read_excel('./siwei_day_traffic.xlsx')
    X=data[data['week_day']=='周五'].jam_num[:5].astype(float).values
    print(X)
    # 訓(xùn)練集
    X_train = X[:int(len(X) * 0.7)]
    # 測試集
    X_test = X[int(len(X) * 0.7):]
    Grade_ratio_test(X_train)  # 判斷模型可行性
    a,u=model_train(X_train)  # 訓(xùn)練
    Y_pred = model_predict(a,u,len(X),X)  # 預(yù)測
    Y_train_pred = Y_pred[:len(X_train)]
    Y_test_pred = Y_pred[len(X_train):]
    score_test = result_evaluate(Y_test_pred, X_test)  # 評(píng)估
    # 可視化
    plt.grid()
    plt.plot(np.arange(len(X_train)), X_train, '->')
    plt.plot(np.arange(len(X_train)), Y_train_pred, '-o')
    plt.legend(['負(fù)荷實(shí)際值', '灰色預(yù)測模型預(yù)測值'])
    plt.title('訓(xùn)練集')
    plt.show()
    plt.grid()
    plt.plot(np.arange(len(X_test)), X_test, '->')
    plt.plot(np.arange(len(X_test)), Y_test_pred, '-o')
    plt.legend(['負(fù)荷實(shí)際值', '灰色預(yù)測模型預(yù)測值'])
    plt.title('測試集')
    plt.show()

總結(jié)

模型優(yōu)點(diǎn):數(shù)據(jù)少且無明顯規(guī)律時(shí)可用,利用微分方程挖掘數(shù)據(jù)本質(zhì)規(guī)律。

模型缺點(diǎn):灰色預(yù)測只適合短期預(yù)測、指數(shù)增長的預(yù)測。

以上就是一文詳解Python灰色預(yù)測模型實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Python灰色預(yù)測模型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論