在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 分析時(shí)間序列數(shù)據(jù)
人工智能開(kāi)發(fā)環(huán)境配置
計(jì)算機(jī)視覺(jué)
啟發(fā)式搜索
人工智能監(jiān)督學(xué)習(xí)(回歸)
賭勝負(fù)
強(qiáng)化學(xué)習(xí)
人工智能無(wú)監(jiān)督學(xué)習(xí):聚類(lèi)
人工智能入門(mén)概念
深度學(xué)習(xí)
NLTK包
人工智能(Python)教程
神經(jīng)網(wǎng)絡(luò)
自然語(yǔ)言處理
人工智能邏輯編程
遺傳算法
人工智能監(jiān)督學(xué)習(xí)(分類(lèi))
人工智能數(shù)據(jù)準(zhǔn)備
人工智能機(jī)器學(xué)習(xí)
語(yǔ)音識(shí)別
分析時(shí)間序列數(shù)據(jù)

分析時(shí)間序列數(shù)據(jù)

預(yù)測(cè)給定輸入序列中的下一個(gè)是機(jī)器學(xué)習(xí)中的另一個(gè)重要概念。 本章為您提供有關(guān)分析時(shí)間序列數(shù)據(jù)的詳細(xì)說(shuō)明。

時(shí)間序列數(shù)據(jù)介紹

時(shí)間序列數(shù)據(jù)表示處于一系列特定時(shí)間間隔的數(shù)據(jù)。 如果我們想在機(jī)器學(xué)習(xí)中構(gòu)建序列預(yù)測(cè),那么必須處理連續(xù)的數(shù)據(jù)和時(shí)間。 系列數(shù)據(jù)是連續(xù)數(shù)據(jù)的摘要。 數(shù)據(jù)排序是順序數(shù)據(jù)的一個(gè)重要特征。

序列分析或時(shí)間序列分析的基本概念

序列分析或時(shí)間序列分析是基于先前觀察到的預(yù)測(cè)給定輸入序列中的下一個(gè)。 預(yù)測(cè)可以是任何可能接下來(lái)的事情:符號(hào),數(shù)字,次日天氣,下一個(gè)演講等。序列分析在諸如股票市場(chǎng)分析,天氣預(yù)報(bào)和產(chǎn)品推薦等應(yīng)用中非常有用。

實(shí)例

考慮下面的例子來(lái)理解序列預(yù)測(cè)。 這里A,B,C,D是給定值,并且必須使用序列預(yù)測(cè)模型預(yù)測(cè)值E。

安裝有用的包

對(duì)于使用Python進(jìn)行時(shí)間序列數(shù)據(jù)分析,我們需要安裝以下軟件包 -

Pandas

Pandas是一個(gè)開(kāi)源的BSD許可庫(kù),它為Python提供了高性能,簡(jiǎn)便的數(shù)據(jù)結(jié)構(gòu)使用和數(shù)據(jù)分析工具。

有關(guān)Pandas教程,請(qǐng)?jiān)L問(wèn)以下網(wǎng)址:https://www.yiibai.com/pandas/

使用以下命令安裝Pandas -

pip install pandas

如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -

conda install -c anaconda pandas

hmmlearn

它是一個(gè)開(kāi)源BSD許可的庫(kù),它由簡(jiǎn)單的算法和模型組成,用于學(xué)習(xí)Python中的隱馬爾可夫模型(HMM)。 使用以下命令安裝它 -

pip install hmmlearn

如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -

conda install -c anaconda hmmlearn

PyStruct

它是一個(gè)結(jié)構(gòu)化的學(xué)習(xí)和預(yù)測(cè)庫(kù)。 在PyStruct中實(shí)現(xiàn)的學(xué)習(xí)算法具有諸如條件隨機(jī)場(chǎng)(CRF),最大值 - 馬爾科夫隨機(jī)網(wǎng)絡(luò)(M3N)或結(jié)構(gòu)支持向量機(jī)等名稱(chēng)。使用以下命令來(lái)安裝它 -

pip install pystruct

CVXOPT

它用于基于Python編程語(yǔ)言的凸優(yōu)化。 它也是一個(gè)免費(fèi)的軟件包。 使用以下命令來(lái)安裝它 -

pip install cvxopt

如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -

conda install -c anaconda cvdoxt

Pandas:從時(shí)間序列數(shù)據(jù)中處理,分割和提取統(tǒng)計(jì)信息

如果必須使用時(shí)間序列數(shù)據(jù),Pandas是一個(gè)非常有用的工具。 在Pandas的幫助下,可以執(zhí)行以下操作 -

  • 使用pd.date_range包創(chuàng)建一系列日期
  • 通過(guò)使用pd.Series包對(duì)帶有日期數(shù)據(jù)進(jìn)行索引
  • 使用ts.resample包執(zhí)行重新采樣
  • 改變頻率

示例

以下示例顯示使用Pandas處理和分割時(shí)間序列數(shù)據(jù)。 請(qǐng)注意,這里使用月度北極濤動(dòng)數(shù)據(jù),可以從monthly.ao.index.b50.current.ascii下載并可以轉(zhuǎn)換為文本格式。

處理時(shí)間序列數(shù)據(jù)

要處理時(shí)間序列數(shù)據(jù),您必須執(zhí)行以下步驟 -

第1步 ,導(dǎo)入以下軟件包 -

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

接下來(lái),定義一個(gè)函數(shù),它將從輸入文件中讀取數(shù)據(jù),如以下代碼所示 -

def read_data(input_file):
   input_data = np.loadtxt(input_file, delimiter = None)

現(xiàn)在,將這些數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列。 為此,請(qǐng)創(chuàng)建時(shí)間序列的日期范圍。 在這個(gè)例子中,我們保留一個(gè)月的數(shù)據(jù)頻率。 文件中是存儲(chǔ)從1950年1月開(kāi)始的數(shù)據(jù)。

dates = pd.date_range('1950-01', periods = input_data.shape[0], freq = 'M')

在這一步中,在Pandas Series的幫助下創(chuàng)建時(shí)間序列數(shù)據(jù),如下所示 -

output = pd.Series(input_data[:, index], index = dates)    
return output

if __name__=='__main__':

如下所示,指定輸入文件的路徑 -

input_file = "/Users/admin/AO.txt"

現(xiàn)在,將列轉(zhuǎn)換為時(shí)間序列格式,如下所示 -

timeseries = read_data(input_file)

最后,使用顯示的命令繪制并可視化數(shù)據(jù) -

plt.figure()
timeseries.plot()
plt.show()

觀察如下圖所示 -

切片時(shí)間序列數(shù)據(jù)
切片涉及僅檢索時(shí)間序列數(shù)據(jù)的一部分。 作為示例的一部分,我們僅在1980年到1990年間對(duì)數(shù)據(jù)進(jìn)行分割。請(qǐng)注意以下執(zhí)行此任務(wù)的代碼 -

timeseries['1980':'1990'].plot()
   <matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00>

plt.show()

當(dāng)您運(yùn)行切片時(shí)間序列數(shù)據(jù)的代碼時(shí),可以觀察下圖所示的圖形 -

從時(shí)間序列數(shù)據(jù)中提取統(tǒng)計(jì)信息

如果需要得出一些重要結(jié)論,需要從一個(gè)給定的數(shù)據(jù)中提取一些統(tǒng)計(jì)數(shù)據(jù)。 平均值,方差,相關(guān)性,最大值和最小值是這些統(tǒng)計(jì)中的一部分。 如果您想從給定的時(shí)間序列數(shù)據(jù)中提取此類(lèi)統(tǒng)計(jì)信息,則可以使用以下代碼 -

平均值

可以使用mean()函數(shù)來(lái)查找平均值,如下所示 -

timeseries.mean()

例子代碼的輸出是 -

-0.11143128165238671

最大值

可以使用max()函數(shù)來(lái)查找最大值,如下所示 -

timeseries.max()

那么在討論的例子中觀察的輸出是 -

3.4952999999999999

最小值

可以使用min()函數(shù)來(lái)查找最小值,如下所示 -

timeseries.min()

那么在討論的例子中觀察的輸出是 -

-4.2656999999999998

一次性獲得所有

如果您想一次計(jì)算所有統(tǒng)計(jì)數(shù)據(jù),則可以使用describe()函數(shù),如下所示 -

timeseries.describe()

那么觀察上面例子的輸出是 -

count   817.000000
mean     -0.111431
std       1.003151
min      -4.265700
25%      -0.649430
50%      -0.042744
75%       0.475720
max       3.495300
dtype: float64

重新取樣

可以將數(shù)據(jù)重新采樣到不同的時(shí)間頻率。 執(zhí)行重新采樣的兩個(gè)參數(shù)是 -

  • 時(shí)間段
  • 方法

使用mean()重新采樣

以下代碼使用mean()方法重新采樣數(shù)據(jù),這是默認(rèn)方法 -

timeseries_mm = timeseries.resample("A").mean()
timeseries_mm.plot(style = 'g--')
plt.show()

然后,可以觀察下面使用mean()重采樣輸出的圖形 -

使用median()重新采樣

使用以下代碼使用median()方法重新采樣數(shù)據(jù) -

timeseries_mm = timeseries.resample("A").median()
timeseries_mm.plot()
plt.show()

然后,觀察下面的圖形是使用median()重新采樣的輸出 -

滾動(dòng)平均值

使用下面的代碼來(lái)計(jì)算滾動(dòng)(移動(dòng))的平均值 -

timeseries.rolling(window = 12, center = False).mean().plot(style = '-g')
plt.show()

然后,觀察滾動(dòng)(移動(dòng))平均值的輸出圖表 -

隱馬爾可夫模型(HMM)分析順序數(shù)據(jù)

HMM是一種統(tǒng)計(jì)模型,廣泛用于時(shí)間序列股市分析,健康檢查和語(yǔ)音識(shí)別等具有延續(xù)性和可擴(kuò)展性的數(shù)據(jù)。 本節(jié)詳細(xì)介紹使用隱馬爾可夫模型(HMM)分析順序數(shù)據(jù)。

隱馬爾可夫模型(HMM)

HMM是一個(gè)基于馬爾可夫鏈概念的隨機(jī)模型,它基于未來(lái)統(tǒng)計(jì)量的概率僅取決于當(dāng)前過(guò)程狀態(tài)而非其之前的任何狀態(tài)的假設(shè)。 例如,當(dāng)扔硬幣時(shí),不能說(shuō)第五次拋擲的結(jié)果是正面。 這是因?yàn)橛矌艣](méi)有任何記憶,下一個(gè)結(jié)果不依賴(lài)于以前的結(jié)果。

在數(shù)學(xué)上,HMM由以下變量組成 -

狀態(tài)(S)
它是HMM中存在的一組隱藏或潛在狀態(tài)。 它由S表示。

輸出符號(hào)(O)
它是HMM中存在的一組可能的輸出符號(hào)。 它由O表示。

狀態(tài)轉(zhuǎn)移概率矩陣(A)
這是從一個(gè)狀態(tài)過(guò)渡到其他狀態(tài)的可能性。 它由A表示。

觀測(cè)發(fā)射概率矩陣(B)
它是在特定狀態(tài)下發(fā)射/觀測(cè)符號(hào)的概率。 它由B表示。

先驗(yàn)概率矩陣(Π)
這是從系統(tǒng)的各種狀態(tài)開(kāi)始處于特定狀態(tài)的概率。 它由Π表示。
因此,HMM可以被定義為λ=(S,O,A,B,π),
其中,

  • S = {s1,s2,…,sN}是一組N個(gè)可能的狀態(tài),
  • O = {o1,o2,…,oM}是一組M個(gè)可能的觀察符號(hào),
  • A是N×N狀態(tài)轉(zhuǎn)移概率矩陣(TPM),
  • B是N