預(yù)測給定輸入序列中的下一個是機器學(xué)習(xí)中的另一個重要概念。 本章為您提供有關(guān)分析時間序列數(shù)據(jù)的詳細(xì)說明。
時間序列數(shù)據(jù)表示處于一系列特定時間間隔的數(shù)據(jù)。 如果我們想在機器學(xué)習(xí)中構(gòu)建序列預(yù)測,那么必須處理連續(xù)的數(shù)據(jù)和時間。 系列數(shù)據(jù)是連續(xù)數(shù)據(jù)的摘要。 數(shù)據(jù)排序是順序數(shù)據(jù)的一個重要特征。
序列分析或時間序列分析的基本概念
序列分析或時間序列分析是基于先前觀察到的預(yù)測給定輸入序列中的下一個。 預(yù)測可以是任何可能接下來的事情:符號,數(shù)字,次日天氣,下一個演講等。序列分析在諸如股票市場分析,天氣預(yù)報和產(chǎn)品推薦等應(yīng)用中非常有用。
實例
考慮下面的例子來理解序列預(yù)測。 這里A,B,C,D是給定值,并且必須使用序列預(yù)測模型預(yù)測值E。

對于使用Python進(jìn)行時間序列數(shù)據(jù)分析,我們需要安裝以下軟件包 -
Pandas
Pandas是一個開源的BSD許可庫,它為Python提供了高性能,簡便的數(shù)據(jù)結(jié)構(gòu)使用和數(shù)據(jù)分析工具。
有關(guān)Pandas教程,請訪問以下網(wǎng)址:https://www.yiibai.com/pandas/
使用以下命令安裝Pandas -
pip install pandas
如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -
conda install -c anaconda pandas
hmmlearn
它是一個開源BSD許可的庫,它由簡單的算法和模型組成,用于學(xué)習(xí)Python中的隱馬爾可夫模型(HMM)。 使用以下命令安裝它 -
pip install hmmlearn
如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -
conda install -c anaconda hmmlearn
PyStruct
它是一個結(jié)構(gòu)化的學(xué)習(xí)和預(yù)測庫。 在PyStruct中實現(xiàn)的學(xué)習(xí)算法具有諸如條件隨機場(CRF),最大值 - 馬爾科夫隨機網(wǎng)絡(luò)(M3N)或結(jié)構(gòu)支持向量機等名稱。使用以下命令來安裝它 -
pip install pystruct
CVXOPT
它用于基于Python編程語言的凸優(yōu)化。 它也是一個免費的軟件包。 使用以下命令來安裝它 -
pip install cvxopt
如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么可以使用以下命令 -
conda install -c anaconda cvdoxt
如果必須使用時間序列數(shù)據(jù),Pandas是一個非常有用的工具。 在Pandas的幫助下,可以執(zhí)行以下操作 -
pd.date_range包創(chuàng)建一系列日期pd.Series包對帶有日期數(shù)據(jù)進(jìn)行索引ts.resample包執(zhí)行重新采樣示例
以下示例顯示使用Pandas處理和分割時間序列數(shù)據(jù)。 請注意,這里使用月度北極濤動數(shù)據(jù),可以從monthly.ao.index.b50.current.ascii下載并可以轉(zhuǎn)換為文本格式。
處理時間序列數(shù)據(jù)
要處理時間序列數(shù)據(jù),您必須執(zhí)行以下步驟 -
第1步 ,導(dǎo)入以下軟件包 -
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
接下來,定義一個函數(shù),它將從輸入文件中讀取數(shù)據(jù),如以下代碼所示 -
def read_data(input_file):
input_data = np.loadtxt(input_file, delimiter = None)
現(xiàn)在,將這些數(shù)據(jù)轉(zhuǎn)換為時間序列。 為此,請創(chuàng)建時間序列的日期范圍。 在這個例子中,我們保留一個月的數(shù)據(jù)頻率。 文件中是存儲從1950年1月開始的數(shù)據(jù)。
dates = pd.date_range('1950-01', periods = input_data.shape[0], freq = 'M')
在這一步中,在Pandas Series的幫助下創(chuàng)建時間序列數(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)換為時間序列格式,如下所示 -
timeseries = read_data(input_file)
最后,使用顯示的命令繪制并可視化數(shù)據(jù) -
plt.figure()
timeseries.plot()
plt.show()
觀察如下圖所示 -


切片時間序列數(shù)據(jù)
切片涉及僅檢索時間序列數(shù)據(jù)的一部分。 作為示例的一部分,我們僅在1980年到1990年間對數(shù)據(jù)進(jìn)行分割。請注意以下執(zhí)行此任務(wù)的代碼 -
timeseries['1980':'1990'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00>
plt.show()
當(dāng)您運行切片時間序列數(shù)據(jù)的代碼時,可以觀察下圖所示的圖形 -

如果需要得出一些重要結(jié)論,需要從一個給定的數(shù)據(jù)中提取一些統(tǒng)計數(shù)據(jù)。 平均值,方差,相關(guān)性,最大值和最小值是這些統(tǒng)計中的一部分。 如果您想從給定的時間序列數(shù)據(jù)中提取此類統(tǒng)計信息,則可以使用以下代碼 -
平均值
可以使用mean()函數(shù)來查找平均值,如下所示 -
timeseries.mean()
例子代碼的輸出是 -
-0.11143128165238671
最大值
可以使用max()函數(shù)來查找最大值,如下所示 -
timeseries.max()
那么在討論的例子中觀察的輸出是 -
3.4952999999999999
最小值
可以使用min()函數(shù)來查找最小值,如下所示 -
timeseries.min()
那么在討論的例子中觀察的輸出是 -
-4.2656999999999998
一次性獲得所有
如果您想一次計算所有統(tǒng)計數(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ù)重新采樣到不同的時間頻率。 執(zhí)行重新采樣的兩個參數(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()重新采樣的輸出 -

滾動平均值
使用下面的代碼來計算滾動(移動)的平均值 -
timeseries.rolling(window = 12, center = False).mean().plot(style = '-g')
plt.show()
然后,觀察滾動(移動)平均值的輸出圖表 -

HMM是一種統(tǒng)計模型,廣泛用于時間序列股市分析,健康檢查和語音識別等具有延續(xù)性和可擴展性的數(shù)據(jù)。 本節(jié)詳細(xì)介紹使用隱馬爾可夫模型(HMM)分析順序數(shù)據(jù)。
HMM是一個基于馬爾可夫鏈概念的隨機模型,它基于未來統(tǒng)計量的概率僅取決于當(dāng)前過程狀態(tài)而非其之前的任何狀態(tài)的假設(shè)。 例如,當(dāng)扔硬幣時,不能說第五次拋擲的結(jié)果是正面。 這是因為硬幣沒有任何記憶,下一個結(jié)果不依賴于以前的結(jié)果。
在數(shù)學(xué)上,HMM由以下變量組成 -
狀態(tài)(S)
它是HMM中存在的一組隱藏或潛在狀態(tài)。 它由S表示。
輸出符號(O)
它是HMM中存在的一組可能的輸出符號。 它由O表示。
狀態(tài)轉(zhuǎn)移概率矩陣(A)
這是從一個狀態(tài)過渡到其他狀態(tài)的可能性。 它由A表示。
觀測發(fā)射概率矩陣(B)
它是在特定狀態(tài)下發(fā)射/觀測符號的概率。 它由B表示。
先驗概率矩陣(Π)
這是從系統(tǒng)的各種狀態(tài)開始處于特定狀態(tài)的概率。 它由Π表示。
因此,HMM可以被定義為λ=(S,O,A,B,π),
其中,