AI人工智能 时间序列数据介绍
预测给定输入序列中的下一个是机器学习中的另一个重要概念。 本章为您提供有关分析时间序列数据的详细说明。
时间序列数据介绍
时间序列数据表示处于一系列特定时间间隔的数据。 如果我们想在机器学习中构建序列预测,那么必须处理连续的数据和时间。系列数据是连续数据的摘要。 数据排序是顺序数据的一个重要特征
。
序列分析或时间序列分析的基本概念
序列分析或时间序列分析是基于先前观察到的预测给定输入序列中的下一个。 预测可以是任何可能接下来的事情:符号,数字,次日天气,下一个演讲等
。序列分析在诸如股票市场分析,天气预报和产品推荐等应用中非常有用。
实例
考虑下面的例子来理解序列预测。 这里 A,B,C,D 是给定值,并且必须使用序列预测模型预测值 E。
安装有用的包
对于使用 Python 进行时间序列数据分析,我们需要安装以下软件包
Pandas
Pandas 是一个开源的 BSD 许可库,它为 Python 提供了高性能,简便的数据结构使用和数据分析工具。
有关 Pandas 教程,请访问以下网址:https://www.yiibai.com/pandas/
使用以下命令安装 Pandas
pip install pandas
如果您使用的是 Anaconda 并希望使用 conda 软件包管理器进行安装,那么可以使用以下命令
conda install -c anaconda pandas
hmmlearn
它是一个开源 BSD 许可的库,它由简单的算法和模型组成,用于学习 Python 中的隐马尔可夫模型(HMM)。 使用以下命令安装它
pip install hmmlearn
如果您使用的是 Anaconda 并希望使用 conda 软件包管理器进行安装,那么可以使用以下命令 -
conda install -c anaconda hmmlearn PyStruct
它是一个结构化的学习和预测库。 在 PyStruct 中实现的学习算法具有诸如条件随机场(CRF)
,最大值 - 马尔科夫随机网络(M3N)或结构支持向量机等名称。使用以下命令来安装它 -
pip install pystruct CVXOPT
它用于基于 Python 编程语言的凸优化。 它也是一个免费的软件包。 使用以下命令来安装它
pip install cvxopt
如果您使用的是 Anaconda 并希望使用 conda 软件包管理器进行安装,那么可以使用以下命令
conda install -c anaconda cvdoxt
AI人工智能 Pandas
Pandas:从时间序列数据中处理,分割和提取统计信息
Pandas 是一个非常有用的工具。 在 Pandas 的帮助下,可以执行以下操作
使用 pd.date_range 包创建一系列日期
通过使用 pd.Series 包对带有日期数据进行索引
使用 ts.resample 包执行重新采样
改变频率
示例
以下示例显示使用Pandas处理和分割时间序列数据。 请注意,这里使用月度北极涛动数据,可以从 monthly.ao.index.b50.current.ascii
下载并可以转换为文本格式。
处理时间序列数据
要处理时间序列数据,您必须执行以下步骤
第1步 ,导入以下软件包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
接下来,定义一个函数,它将从输入文件中读取数据,如以下代码所示
def read_data(input_file):
input_data = np.loadtxt(input_file, delimiter = None)
现在,将这些数据转换为时间序列。 为此,请创建时间序列的日期范围。 在这个例子中,我们保留一个月的数据频率。 文件中是存储从 1950年1月开始的数据。
dates = pd.date_range('1950-01', periods = input_data.shape[0], freq = 'M')
在这一步中,在 Pandas Series 的
帮助下创建时间序列数据,如下所示
output = pd.Series(input_data[:, index], index = dates)
return output
if __name__=='__main__':
如下所示,指定输入文件的路径
input_file = "/Users/admin/AO.txt"
现在,将列转换为时间序列格式,如下所示
timeseries = read_data(input_file)
最后,使用显示的命令绘制并可视化数据
plt.figure()
timeseries.plot()
plt.show()
观察如下图所示
切片时间序列数据 切片涉及仅检索时间序列数据的一部分。 作为示例的一部分,我们仅在1980年到1990年间对数据进行分割。请注意以下执行此任务的代码
timeseries['1980':'1990'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00>
plt.show()
当您运行切片时间序列数据的代码时,可以观察下图所示的图形
AI人工智能 从时间序列数据中提取统计信息
平均值,方差,相关性,最大值和最小值是这些统计中的一部分
。 如果您想从给定的时间序列数据中提取此类统计信息,则可以使用以下代码
平均值
可以使用 mean()函数来查找平均值,如下所示
timeseries.mean()
例子代码的输出是
-0.11143128165238671
最大值
可以使用 max()函数来查找最大值,如下所示
timeseries.max()
那么在讨论的例子中观察的输出是
3.4952999999999999
最小值
可以使用 min() 函数来查找最小值,如下所示
timeseries.min()
那么在讨论的例子中观察的输出是
-4.2656999999999998
一次性获得所有
如果您想一次计算所有统计数据,则可以使用 describe() 函数,如下所示
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
重新取样
可以将数据重新采样到不同的时间频率。 执行重新采样的两个参数是
时间段
方法
使用 mean()重新采样
以下代码使用 mean() 方法重新采样数据,这是默认方法
timeseries_mm = timeseries.resample("A").mean()
timeseries_mm.plot(style = 'g--')
plt.show()
然后,可以观察下面使用 mean() 重采样输出的图形 -
使用median()重新采样
使用以下代码使用 median() 方法重新采样数据 -
timeseries_mm = timeseries.resample("A").median()
timeseries_mm.plot()
plt.show()
然后,观察下面的图形是使用 median() 重新采样的输出
滚动平均值
使用下面的代码来计算滚动(移动)的平均值
timeseries.rolling(window = 12, center = False).mean().plot(style = '-g')
plt.show()
然后,观察滚动(移动)平均值的输出图表
AI人工智能 隐马尔可夫模型(HMM)分析顺序数据
HMM 是一种统计模型,广泛用于时间序列股市分析,健康检查和语音识别等具有延续性和可扩展性的数据。 本节详细介绍使用隐马尔可夫模型(HMM)分析顺序数据。
隐马尔可夫模型(HMM)
HMM 是一个基于马尔可夫链概念的随机模型,它基于未来统计量的概率仅取决于当前过程状态而非其之前的任何状态的假设。
例如,当扔硬币时,不能说第五次抛掷的结果是正面。 这是因为硬币没有任何记忆,下一个结果不依赖于以前的结果。
在数学上,HMM 由以下变量组成
状态(S) 它是 HMM 中存在的一组隐藏或潜在状态。 它由 S 表示。
输出符号(O) 它是 HMM 中存在的一组可能的输出符号。 它由 O 表示。
状态转移概率矩阵(A) 这是从一个状态过渡到其他状态的可能性。 它由 A 表示。
观测发射概率矩阵(B) 它是在特定状态下发射/观测符号的概率。 它由 B 表示。
先验概率矩阵(Π) 这是从系统的各种状态开始处于特定状态的概率。 它由Π表示。 因此,HMM 可以被定义为 λ=(S,O,A,B,π), 其中,
S = {s1,s2,…,sN}是一组 N 个可能的状态,
O = {o1,o2,…,oM}是一组 M 个可能的观察符号,
A是N×N状态转移概率矩阵(TPM),
B是N