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

python構(gòu)建指數(shù)平滑預(yù)測模型示例

 更新時(shí)間:2019年11月21日 15:44:50   作者:AlanConstantineLau  
今天小編就為大家分享一篇python構(gòu)建指數(shù)平滑預(yù)測模型示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

指數(shù)平滑法

其實(shí)我想說自己百度的…

只有懂的人才會(huì)找到這篇文章…

不懂的人…看了我的文章…還是不懂哈哈哈

指數(shù)平滑法相比于移動(dòng)平均法,它是一種特殊的加權(quán)平均方法。簡單移動(dòng)平均法用的是算術(shù)平均數(shù),近期數(shù)據(jù)對預(yù)測值的影響比遠(yuǎn)期數(shù)據(jù)要大一些,而且越近的數(shù)據(jù)影響越大。指數(shù)平滑法正是考慮了這一點(diǎn),并將其權(quán)值按指數(shù)遞減的規(guī)律進(jìn)行分配,越接近當(dāng)前的數(shù)據(jù),權(quán)重越大;反之,遠(yuǎn)離當(dāng)前的數(shù)據(jù),其權(quán)重越小。指數(shù)平滑法按照平滑的次數(shù),一般可分為一次指數(shù)平滑法、二次指數(shù)平滑法和三次指數(shù)平滑法等。然而一次指數(shù)平滑法適用于無趨勢效應(yīng)、呈平滑趨勢的時(shí)間序列的預(yù)測和分析,二次指數(shù)平滑法多適用于呈線性變化的時(shí)間序列預(yù)測。

具體公式還是百度吧…

材料

1.python3.5

2.numpy

3.matplotlib

4.國家社科基金1995-2015年立項(xiàng)數(shù)據(jù)

需求

預(yù)測2016年和2017年國家社科基金項(xiàng)目立項(xiàng)數(shù)量

數(shù)據(jù)

#year time_id number
1994 1 10
1995 2 3
1996 3 27
1997 4 13
1998 5 12
1999 6 13
2000 7 14
2001 8 23
2002 9 32
2003 10 30
2004 11 36
2005 12 40
2006 13 58
2007 14 51
2008 15 73
2009 16 80
2010 17 106
2011 18 127
2012 19 135
2013 20 161
2014 21 149
2015 22 142

代碼

# -*- coding: utf-8 -*-
# @Date  : 2017-04-11 21:27:00
# @Author : Alan Lau (rlalan@outlook.com)
# @Language : Python3.5

import numpy as np
from matplotlib import pyplot as plt

#指數(shù)平滑公式
def exponential_smoothing(alpha, s):
 s2 = np.zeros(s.shape)
 s2[0] = s[0]
 for i in range(1, len(s2)):
  s2[i] = alpha*s[i]+(1-alpha)*s2[i-1]
 return s2

#繪制預(yù)測曲線
def show_data(new_year, pre_year, data, s_pre_double, s_pre_triple):
 year, time_id, number = data.T

 plt.figure(figsize=(14, 6), dpi=80)#設(shè)置繪圖區(qū)域的大小和像素
 plt.plot(year, number, color='blue', label="actual value")#將實(shí)際值的折線設(shè)置為藍(lán)色
 plt.plot(new_year[1:], s_pre_double[2:],color='red', label="double predicted value")#將二次指數(shù)平滑法計(jì)算的預(yù)測值的折線設(shè)置為紅色
 plt.plot(new_year[1:], s_pre_triple[2:],color='green', label="triple predicted value")#將三次指數(shù)平滑法計(jì)算的預(yù)測值的折線設(shè)置為綠色
 plt.legend(loc='lower right')#顯示圖例的位置,這里為右下方
 plt.title('Projects')
 plt.xlabel('year')#x軸標(biāo)簽
 plt.ylabel('number')#y軸標(biāo)簽
 plt.xticks(new_year)#設(shè)置x軸的刻度線為new_year
 plt.show()


def main():
 alpha = .70#設(shè)置alphe,即平滑系數(shù)
 pre_year = np.array([2016, 2017])#將需要預(yù)測的兩年存入numpy的array對象里
 data_path = r'data1.txt'#設(shè)置數(shù)據(jù)路徑
 data = np.loadtxt(data_path)#用numpy讀取數(shù)據(jù)
 year, time_id, number = data.T#將數(shù)據(jù)分別賦值給year, time_id, number
 initial_line = np.array([0, 0, number[0]])#初始化,由于平滑指數(shù)是根據(jù)上一期的數(shù)值進(jìn)行預(yù)測的,原始數(shù)據(jù)中的最早數(shù)據(jù)為1995,沒有1994年的數(shù)據(jù),這里定義1994年的數(shù)據(jù)和1995年數(shù)據(jù)相同
 initial_data = np.insert(data, 0, values=initial_line, axis=0)#插入初始化數(shù)據(jù)
 initial_year, initial_time_id, initial_number = initial_data.T#插入初始化年

 s_single = exponential_smoothing(alpha, initial_number)#計(jì)算一次指數(shù)平滑
 s_double = exponential_smoothing(alpha, s_single)#計(jì)算二次平滑字?jǐn)?shù),二次平滑指數(shù)是在一次指數(shù)平滑的基礎(chǔ)上進(jìn)行的,三次指數(shù)平滑以此類推

 a_double = 2*s_single-s_double#計(jì)算二次指數(shù)平滑的a
 b_double = (alpha/(1-alpha))*(s_single-s_double)#計(jì)算二次指數(shù)平滑的b
 s_pre_double = np.zeros(s_double.shape)#建立預(yù)測軸
 for i in range(1, len(initial_time_id)):
  s_pre_double[i] = a_double[i-1]+b_double[i-1]#循環(huán)計(jì)算每一年的二次指數(shù)平滑法的預(yù)測值,下面三次指數(shù)平滑法原理相同
 pre_next_year = a_double[-1]+b_double[-1]*1#預(yù)測下一年
 pre_next_two_year = a_double[-1]+b_double[-1]*2#預(yù)測下兩年
 insert_year = np.array([pre_next_year, pre_next_two_year])
 s_pre_double = np.insert(s_pre_double, len(s_pre_double), values=np.array([pre_next_year, pre_next_two_year]), axis=0)#組合預(yù)測值

 s_triple = exponential_smoothing(alpha, s_double)

 a_triple = 3*s_single-3*s_double+s_triple
 b_triple = (alpha/(2*((1-alpha)**2)))*((6-5*alpha)*s_single -2*((5-4*alpha)*s_double)+(4-3*alpha)*s_triple)
 c_triple = ((alpha**2)/(2*((1-alpha)**2)))*(s_single-2*s_double+s_triple)

 s_pre_triple = np.zeros(s_triple.shape)

 for i in range(1, len(initial_time_id)):
  s_pre_triple[i] = a_triple[i-1]+b_triple[i-1]*1 + c_triple[i-1]*(1**2)

 pre_next_year = a_triple[-1]+b_triple[-1]*1 + c_triple[-1]*(1**2)
 pre_next_two_year = a_triple[-1]+b_triple[-1]*2 + c_triple[-1]*(2**2)
 insert_year = np.array([pre_next_year, pre_next_two_year])
 s_pre_triple = np.insert(s_pre_triple, len(s_pre_triple), values=np.array([pre_next_year, pre_next_two_year]), axis=0)

 new_year = np.insert(year, len(year), values=pre_year, axis=0)
 output = np.array([new_year, s_pre_double, s_pre_triple])
 print(output)
 show_data(new_year, pre_year, data, s_pre_double, s_pre_triple)#傳入預(yù)測值和數(shù)據(jù)


if __name__ == '__main__':
 main()

預(yù)測結(jié)果

代碼及數(shù)據(jù)

以上這篇python構(gòu)建指數(shù)平滑預(yù)測模型示例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用Python進(jìn)行簡單圖像識別(驗(yàn)證碼)

    用Python進(jìn)行簡單圖像識別(驗(yàn)證碼)

    這篇文章主要為大家詳細(xì)介紹了用Python進(jìn)行簡單圖像識別驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python smtplib發(fā)送多個(gè)email聯(lián)系人的實(shí)現(xiàn)

    python smtplib發(fā)送多個(gè)email聯(lián)系人的實(shí)現(xiàn)

    這篇文章主要介紹了python smtplib發(fā)送多個(gè)email聯(lián)系人的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用

    Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用

    csv文件是一種逗號分隔的純文本形式存儲(chǔ)的表格數(shù)據(jù),Python內(nèi)置了CSV模塊,可直接通過該模塊實(shí)現(xiàn)csv文件的讀寫操作,下面這篇文章主要給大家介紹了關(guān)于Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用,需要的朋友可以參考下
    2022-09-09
  • Python畫圖工具M(jìn)atplotlib庫常用命令簡述

    Python畫圖工具M(jìn)atplotlib庫常用命令簡述

    這篇文章主要介紹了Python畫圖Matplotlib庫常用命令簡述總結(jié),文中包含詳細(xì)的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析

    Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析

    這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法,結(jié)合實(shí)例形式分析了Beautiful Soup的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 利用scrapy將爬到的數(shù)據(jù)保存到mysql(防止重復(fù))

    利用scrapy將爬到的數(shù)據(jù)保存到mysql(防止重復(fù))

    這篇文章主要給大家介紹了關(guān)于利用scrapy將爬到的數(shù)據(jù)保存到mysql(防止重復(fù))的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2018-03-03
  • Python實(shí)現(xiàn)單詞拼寫檢查

    Python實(shí)現(xiàn)單詞拼寫檢查

    這篇文章主要介紹了Python實(shí)現(xiàn)單詞拼寫檢查,本文講解了單詞拼寫檢查的一些知識并給出兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-04-04
  • 如何利用Python擬合函數(shù)曲線詳解

    如何利用Python擬合函數(shù)曲線詳解

    在實(shí)際項(xiàng)目中,往往有這樣的需求:對采集到的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理(曲線擬合),再計(jì)算出一些想要的參數(shù),比如峰值/dip值/周期等等,下面這篇文章主要給大家介紹了關(guān)于如何利用Python擬合函數(shù)曲線的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 關(guān)于Python函數(shù)對象的名稱空間和作用域

    關(guān)于Python函數(shù)對象的名稱空間和作用域

    這篇文章主要介紹了關(guān)于Python函數(shù)對象的名稱空間和作用域,數(shù)據(jù)的名稱是儲(chǔ)存到棧區(qū),而數(shù)據(jù)的內(nèi)容是儲(chǔ)存到堆區(qū),當(dāng)我們要去使用數(shù)據(jù)的內(nèi)容時(shí),我們可以通過數(shù)據(jù)的名稱來直接去表示數(shù)據(jù)的內(nèi)容,需要的朋友可以參考下
    2023-04-04
  • Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決馬踏棋盤問題,簡單描述了國際象棋馬踏棋盤問題,并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決馬踏棋盤問題的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-09-09

最新評論