关于人工智能:时间序列数据的预处理

5次阅读

共计 3725 个字符,预计需要花费 10 分钟才能阅读完成。

工夫序列数据随处可见,要进行工夫序列剖析,咱们必须先对数据进行预处理。工夫序列预处理技术对数据建模的准确性有重大影响。

在本文中,咱们将次要探讨以下几点:

  • 工夫序列数据的定义及其重要性。
  • 工夫序列数据的预处理步骤。
  • 构建工夫序列数据,查找缺失值,对特色进行去噪,并查找数据集中存在的异样值。

首先,让咱们先理解工夫序列的定义:

工夫序列是在特定工夫距离内记录的一系列均匀分布的观测值。

工夫序列的一个例子是黄金价格。在这种状况下,咱们的察看是在固定工夫距离后一段时间内收集的黄金价格。工夫单位能够是分钟、小时、天、年等。然而任何两个间断样本之间的时间差是雷同的。

在本文中,咱们将看到在深入研究数据建模局部之前应执行的常见工夫序列预处理步骤和与工夫序列数据相干的常见问题。

工夫序列数据预处理

工夫序列数据蕴含大量信息,但通常是不可见的。与工夫序列相干的常见问题是无序工夫戳、缺失值(或工夫戳)、异样值和数据中的噪声。在所有提到的问题中,解决缺失值是最艰难的一个,因为传统的插补(一种通过替换缺失值来保留大部分信息来解决缺失数据的技术)办法在解决工夫序列数据时不实用。为了剖析这个预处理的实时剖析,咱们将应用 Kaggle 的 Air Passenger 数据集。

工夫序列数据通常以非结构化格局存在,即工夫戳可能混合在一起并且没有正确排序。另外在大多数状况下,日期工夫列具备默认的字符串数据类型,在对其利用任何操作之前,必须先将数据工夫列转换为日期工夫数据类型。让咱们将其实现到咱们的数据集中:

import pandas as pd

passenger = pd.read_csv('AirPassengers.csv')
passenger['Date'] = pd.to_datetime(passenger['Date']) 
passenger.sort_values(by=['Date'], inplace=True, ascending=True)

工夫序列中的缺失值

解决工夫序列数据中的缺失值是一项具备挑战性的工作。传统的插补技术不适用于工夫序列数据,因为接管值的程序很重要。为了解决这个问题,咱们有以下插值办法:

插值是一种罕用的工夫序列缺失值插补技术。它有助于应用四周的两个已知数据点估计失落的数据点。这种办法简略且最直观。解决时序数据时能够应用以下的办法:

  • 基于工夫的插值
  • 样条插值
  • 线性插值

让咱们看看咱们的数据在插补之前的样子:

from matplotlib.pyplot import figure
import matplotlib.pyplot as plt

figure(figsize=(12, 5), dpi=80, linewidth=10)
plt.plot(passenger['Date'], passenger['Passengers'])
plt.title('Air Passengers Raw Data with Missing Values')
plt.xlabel('Years', fontsize=14)
plt.ylabel('Number of Passengers', fontsize=14)
plt.show()

让咱们看看以上三个办法的后果:

passenger[‘Linear’] = passenger[‘Passengers’].interpolate(method=’linear’)
passenger[‘Spline order 3’] = passenger[‘Passengers’].interpolate(method=’spline’, order=3)
passenger[‘Time’] = passenger[‘Passengers’].interpolate(method=’time’)

methods = ['Linear', 'Spline order 3', 'Time']

from matplotlib.pyplot import figure
import matplotlib.pyplot as plt
for method in methods:
    figure(figsize=(12, 4), dpi=80, linewidth=10)
    plt.plot(passenger["Date"], passenger[method])
    plt.title('Air Passengers Imputation using:' + types)
    plt.xlabel("Years", fontsize=14)
    plt.ylabel("Number of Passengers", fontsize=14)
    plt.show()

所有的办法都给出了还不错的后果。当缺失值窗口 (缺失数据的宽度) 很小时,这些办法更有意义。然而如果失落了几个间断的值,这些办法就更难预计它们。

工夫序列去噪

工夫序列中的噪声元素可能会导致重大问题,所以个别状况下在构建任何模型之前都会有去除噪声的操作。最小化噪声的过程称为去噪。以下是一些通常用于从工夫序列中去除噪声的办法:

滚动平均值

滚动平均值是先前察看窗口的平均值,其中窗口是来自工夫序列数据的一系列值。为每个有序窗口计算平均值。这能够极大地帮忙最小化工夫序列数据中的噪声。

让咱们在谷歌股票价格上利用滚动平均值:

rolling_google = google_stock_price['Open'].rolling(20).mean()
plt.plot(google_stock_price['Date'], google_stock_price['Open'])
plt.plot(google_stock_price['Date'], rolling_google)
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.legend(['Open','Rolling Mean'])
plt.show()

傅里叶变换

傅里叶变换能够通过将工夫序列数据转换到频域来帮忙去除噪声,咱们能够过滤掉噪声频率。而后利用傅里叶反变换失去滤波后的工夫序列。咱们用傅里叶变换来计算谷歌股票价格。

denoised_google_stock_price = fft_denoiser(value, 0.001, True)
plt.plot(time, google_stock['Open'][0:300])
plt.plot(time, denoised_google_stock_price)
plt.xlabel('Date', fontsize = 13)
plt.ylabel('Stock Price', fontsize = 13)
plt.legend([‘Open’,’Denoised: 0.001'])
plt.show()

工夫序列中的离群值检测

工夫序列中的离群值是指趋势线的忽然顶峰或降落。导致离群值可能有多种因素。让咱们看一下检测离群值的可用办法:

基于滚动统计的办法

这种办法最直观,实用于简直所有类型的工夫序列。在这种办法中,下限和上限是依据特定的统计量度创立的,例如均值和标准差、Z 和 T 分数以及散布的百分位数。例如,咱们能够将下限和上限定义为:

取整个序列的均值和标准差是不可取的,因为在这种状况下,边界将是动态的。边界应该在滚动窗口的根底上创立,就像思考一组间断的察看来创立边界,而后转移到另一个窗口。该办法是一种高效、简略的离群点检测办法。

孤立森林

顾名思义,孤立森林是一种基于决策树的异样检测机器学习算法。它通过应用决策树的分区隔离给定特色集上的数据点来工作。换句话说,它从数据集中取出一个样本,并在该样本上构建树,直到每个点都被隔离。为了隔离数据点,通过抉择该特色的最大值和最小值之间的宰割来随机进行分区,直到每个点都被隔离。特色的随机分区将为异样数据点在树中创立更短的门路,从而将它们与其余数据辨别开来。

K-means 聚类

K-means 聚类是一种无监督机器学习算法,常常用于检测时间序列数据中的异样值。该算法查看数据集中的数据点,并将类似的数据点分组为 K 个聚类。通过测量数据点到其最近质心的间隔来辨别异样。如果间隔大于某个阈值,则将该数据点标记为异样。K-Means 算法应用欧几里得间隔进行比拟。

可能的面试问题

如果一个人在简历中写了一个对于工夫序列的我的项目,那么面试官能够从这个主题中提出这些可能的问题:

  • 预处理工夫序列数据的办法有哪些,与规范插补办法有何不同?
  • 工夫序列窗口是什么意思?
  • 你据说过孤立森林吗?如果是,那么你能解释一下它是如何工作的吗?
  • 什么是傅立叶变换,咱们为什么须要它?
  • 填充工夫序列数据中缺失值的不同办法是什么?

总结

在本文中,咱们钻研了一些常见的工夫序列数据预处理技术。咱们从排序工夫序列察看开始;而后钻研了各种缺失值插补技术。因为咱们解决的是一组有序的察看后果,所以工夫序列插补与传统插补技术不同。此外,还将一些噪声去除技术利用于谷歌股票价格数据集,最初探讨了一些工夫序列的异样值检测办法。应用所有这些提到的预处理步骤可确保高质量数据,为构建简单模型做好筹备。

https://www.overfit.cn/post/9274a9c482b0431a802f5318c15cd76d

作者:Shashank Gupta

正文完
 0