精华内容
下载资源
问答
  • 流中深度学习时间序列分类 处理高速到达的数据流需要开发可以提供快速而准确的预测的模型。 尽管深度神经网络是许多机器学习任务的最新技术,但它们在实时数据流场景中的性能仍是尚未完全解决的研究领域。 然而,...
  • 时间序列分类深度学习 这是发表在“时间序列分类深度学习:评论”的配套资料库,该也可以在。 数据 该项目中使用的数据来自两个来源: ,其中包含85个单变量时间序列数据集。 ,其中包含13个多元时间序列数据...
  • 深度学习时间序列分类

    千次阅读 2020-09-17 21:28:58
    为什么要进行时间序列分类? (Why Time Series Classification?) First of all it’s important to underline why this problem is so important today, and therefore why it is very interesting to understand ...

    为什么要进行时间序列分类? (Why Time Series Classification?)

    First of all it’s important to underline why this problem is so important today, and therefore why it is very interesting to understand the role and the otential of Deep Learning in this sector.

    首先,重要的是要强调为什么这个问题在今天如此重要,因此为什么理解深度学习在该领域的作用和潜力为什么非常有趣。

    During the last years, Time Series Classification has become one of the most challenging problems in data mining. This has happened because any classification problem that uses data taking into account some notion of ordering, can be treated as a Time Series Classification problem.

    在过去的几年中,时间序列分类已成为数据挖掘中最具挑战性的问题之一。 之所以会发生这种情况,是因为考虑到排序的任何使用数据的分类问题都可以视为时间序列分类问题。

    Time series are present in many real-world applications ranging from health care, human activity recognition, cyber-security, finance, marketing, automated disease detection, anomaly detection, etc. With the increase of temporal data availability, many areas are strongly increasing their interest in applications based on time series, and then many algorithms have been proposed.

    时间序列存在于许多实际应用中,包括医疗保健,人类活动识别,网络安全,金融,市场营销,自动疾病检测,异常检测等。随着时间数据可用性的增加,许多领域都在大力发展它们对基于时间序列的应用程序很感兴趣,因此提出了许多算法。

    All these algorithms, apart from those based on deep learning, require some kind of feature engineering as a separate task before the classification is performed, and this can imply the loss of some information and the increase of the development time. On the contrary, deep learning models such as recurrent and convolutional neural networks already incorporate this kind of feature engineering internally, optimizing it and eliminating the need to do it manually. Therefore they are able to extract informations from the time series in a faster, more direct, and more complete way.

    除了基于深度学习的算法以外,所有这些算法在进行分类之前都需要某种特征工程作为单独的任务,这可能意味着某些信息的丢失和开发时间的增加。 相反,深度学习模型(例如递归和卷积神经网络)已经在内部合并了这种特征工程,从而对其进行了优化并消除了手动进行此过程的需要。 因此,他们能够以更快,更直接,更完整的方式从时间序列中提取信息。

    应用领域 (Applications)

    Let’s see some important applications of Reinforcement Learning.

    让我们看看强化学习的一些重要应用。

    Electrocardiogram records can be used to find out various heart problems, and are saved in time series form. Distinguishing the electrocardiogram of a normal heart from the one of a heart with a disease, and recognizing the disease, is a Time Series Classification problem.

    心电图记录可用于发现各种心脏问题,并以时间序列形式保存。 将正常心脏的心电图与患有疾病的心脏的心电图区分开并识别疾病是时间序列分类问题。

    Today many devices can be controlled with the use of simple gestures, without physically touching them. For this purpose these devices record a series of images that are used to interpret the user’s gestures. Identifying the correct gesture from this sequence of images is a Time SeriesClassification problem. Anomaly detection is the identification of unusual events or observations which are significantly different from the majority of the data.

    如今,许多设备都可以使用简单的手势进行控制,而无需实际触摸它们。 为此,这些设备记录了一系列图像,这些图像用于解释用户的手势。 从图像序列中识别正确的手势是一个时间序列分类问题。 异常检测是对与大多数数据有显着差异的异常事件或观察结果的识别。

    Often the data in anomaly detection are time series, for example the temporal trend of a magnitude related to an electronic device, monitored to check that the device is working correctly. Distinguishing the time series of normal operations from that of a device with some anomaly, and recognizing the anomaly, is a Time Series Classification problem.

    异常检测中的数据通常是时间序列,例如与电子设备相关的幅度的时间趋势,需要对其进行监视以检查设备是否正常工作。 将正常操作的时间序列与具有某些异常的设备的时间序列区分开,并识别异常是时间序列分类问题。

    问题定义 (Problem definition)

    Now we give a formal definition of a Time Series Classification problem. Suppose to have a set of objects with the same structure (for example real values, vectors or matrices with same size, etc.), and a fixed set of different classes. We define a dataset as a collection of pairs (object, class), which means that to each object is associated a determinate class. Given a dataset, a Classification problem is building a model that associates to a new object, with the same structure of the others, the probability to belong to the possible classes, accordingly to the features of the objects associated to each class.

    现在我们给出时间序列分类问题的正式定义。 假设有一组具有相同结构的对象(例如,具有相同大小的实数值,向量或矩阵等),以及一组固定的不同类。 我们将数据集定义为对(对象,类)对的集合,这意味着每个对象都关联有一个确定的类。 给定一个数据集,分类问题正在建立一个模型,该模型与一个新对象相关联,并且具有与其他对象相同的结构,从而根据与每个类相关联的对象的特征,属于可能类的可能性。

    An univariate time series is an ordered set of real values, while a M dimensional multivariate time series consists of M different univariate time series with the same length. A Time Series Classification problem is a Classification problem where the objects of the dataset are univariate or multivariate time series.

    单变量时间序列是有序的实数值集,而M维多元时间序列由M个长度相同的不同单变量时间序列组成。 时间序列分类问题是一个分类问题,其中数据集的对象是单变量或多变量时间序列。

    感知器(神经元) (Perceptron (Neuron))

    Before introducing the different types of Deep Learning Architectures, we recall some basic structures that they use. First of all we introduce the Perceptron, that is the basic element of many machine learning algorithms. It is inspired by the functionality of biological neural circuits, and for this reason is also called neuron.

    在介绍不同类型的深度学习架构之前,我们回顾一下它们使用的一些基本结构。 首先,我们介绍Perceptron,这是许多机器学习算法的基本要素。 它受到生物神经回路功能的启发,因此也称为神经元。

    This Figure shows the architecture of a Perceptron. A Perceptron has one or more input values, and every input value is associated to a weight.

    该图显示了感知器的体系结构。 感知器具有一个或多个输入值,并且每个输入值都与一个权重相关联。

    Image for post

    The goal of a Perceptron is to compute the wighted sum of the input values and then apply an activation function to the result. The most common activation functions are sigmoid, hyperbolic tangent and rectifier:

    感知器的目标是计算输入值的加权总和,然后将激活函数应用于结果。 最常见的激活函数是S型,双曲正切和整流器:

    Image for post

    The result of the activation function is referred as the activation of the Perceptron and represents its output value.

    激活功能的结果称为感知器的激活,并表示其输出值。

    多层感知器 (Multi Layer Perceptron)

    Now we introduce the Multi Layer Perceptron (MLP), that is a building block used in many Deep Learning Architectures for Time Series Classification. It is a class of feedforward neural networks and consists of several layers of nodes: one input layer, one or more hidden layers, and one output layer. Every node is connected to all the nodes of its layer, of the previous layer and of the next layer. For this reason we say that Multi Layer Perceptron is fully connected. Each node of the hidden layers and of the output layer is a Perceptron.

    现在,我们介​​绍多层感知器(MLP),它是许多用于时间序列分类的深度学习架构中使用的构建块。 它是一类前馈神经网络,由几层节点组成:一个输入层,一个或多个隐藏层以及一个输出层。 每个节点都连接到其层,上一层和下一层的所有节点。 因此,我们说多层感知器已完全连接。 隐藏层和输出层的每个节点都是一个感知器。

    Image for post

    The output of the Multi Layer Perceptron is obtained computing in sequence the activation of its Perceptrons, and the function that connect the input and the output depends on the values of the weights.

    多层感知器的输出是通过依次计算其感知器的激活而获得的,连接输入和输出的功能取决于权重的值。

    多层感知器分类 (Classification with Multi Layer Perceptron)

    Multi Layer Perceptron is commonly used for Classification problems: given a dataset (that we recall to be a collection of pairs (object, class)), it can be fitted to compute the probability of any new object to belong to each possible class. To do this, first of all we need to represent the pairs (object, class) in the dataset in a more suitable way:

    多层感知器通常用于分类问题:给定一个数据集(我们记得它是对(对象,类)的集合),它可以适合计算任何新对象属于每个可能类的概率。 为此,首先我们需要以更合适的方式在数据集中表示对(对象,类):

    • Every object must be flattened and then represented with a vector, that will be the input vector for training.

      必须将每个对象弄平,然后用向量表示,该向量将作为训练的输入向量。
    • Every class in the dataset must be represented with its one-hot label vector. A one-hot label vector is a vector with size equal to the number of different classes in the dataset. Each element of the array corresponds to a possible class, and every value is 0 apart from that related to the represented class, that is 1. The one-hot label vector will be the target for training. We can see a simple exampe of one hot label vector in this Figure: in the original dataset the column Class has three different values, and the dataset with the one hot label vector has three columns, one for each class.

      数据集中的每个类都必须用其一号标签向量表示。 一键式标签向量是大小等于数据集中不同类的数量的向量。 数组的每个元素对应于一个可能的类,并且每个值除与表示的类相关的值外均为0 ,即1 。 一站式标签向量将成为训练的目标。 我们可以在此图中看到一个热标签向量的简单示例:在原始数据集中,列Class具有三个不同的值,而具有一个热标签向量的数据集具有三列,每个列对应一个。

    Image for post

    In this way we obtain a new dataset of pairs (input vector, target), and we are ready for training. For this process, MLP uses a supervised learning technique called Backpropagation, that works iterating on the input vectors of the dataset:

    这样,我们获得了一个新的对数据集(输入向量,目标),并且已经准备好进行训练。 对于此过程,MLP使用一种称为反向传播的监督学习技术,该技术可对数据集的输入向量进行迭代:

    • At every iteration, the output of the Mlp is computed using the present input vector.

      在每次迭代中,使用当前输入向量计算Mlp的输出。
    • The output is a vector whose components are the estimated probabilities of belonging to each class.

      输出是一个向量,向量的组成部分是属于每个类别的估计概率。
    • The model’s prediction error is computed using a cost function.

      使用成本函数计算模型的预测误差。
    • Then, using gradient descent, the weights are updated in a backward pass to propagate the error.

      然后,使用梯度下降,权重在向后传递中更新以传播误差。

    Thus, by iteratively taking a forward pass followed by backpropagation, the model’s weights are updated in a way that minimizes the loss on the training data. After the training, when the input of the Multi Layer Perceptron is the vector corresponding to an object with the given structure, also not present in the dataset, the output is a vector whose components are the estimated probabilities of belonging to each class.

    因此,通过反复进行前向传播和反向传播,可以以最小化训练数据损失的方式更新模型的权重。 训练后,当多层感知器的输入是与具有给定结构的对象相对应的向量(数据集中也没有出现)时,输出是一个向量,其分量是属于每个类别的估计概率。

    Now, the natural question is: why don’t use the Multi Layer Perceptron for Time Series Classification, taking the whole multivariate time series as input. The answer is that Multi Layer Perceptron, as many other Machine Learning algorithms, don’t work well for Time Series Classification because the length of the time series really hurts the computational speed. Hence, to obtain good results for Time Series Classification it is necessary to extract the relevant features of the input time series, and use them as input of a classification algorithm, in order to obtain better results in a very lower computation time.

    现在,自然的问题是:为什么不使用多层感知器进行时间序列分类,而将整个多元时间序列作为输入。 答案是,与许多其他机器学习算法一样,多层感知器不适用于时间序列分类,因为时间序列的长度确实会损害计算速度。 因此,为了获得时间序列分类的良好结果,有必要提取输入时间序列的相关特征,并将其用作分类算法的输入,以便在非常短的计算时间内获得更好的结果。

    The big advantage of Deep Learning algorithms with respect to other algorithms is that these relevant feature are learned during the training, and not handcrafted. This improves very much the accuracy of the results and makes the data preparation time much lower. Then, after many layers used for the extraction of these relevant features, many Deep Learning architecures can use algorithms like MLP to obtain the desired classification.

    深度学习算法相对于其他算法的最大优势是,这些相关功能是在训练期间学习的,而不是手工制作的。 这极大地提高了结果的准确性,并使数据准备时间大大缩短。 然后,在用于提取这些相关特征的许多层之后,许多深度学习架构可以使用诸如MLP之类的算法来获得所需的分类。

    时间序列分类的深度学习 (Deep Learning for Time Series Classification)

    Image for post

    This Figure shows a general Deep Learning framework for Time Series Classification. It is a composition of several layers that implement non-linear functions. The input is a multivariate time series. Every layer takes as input the output of the previous layer and applies its non-linear transformation to compute its own output.

    该图显示了用于时间序列分类的通用深度学习框架。 它由实现非线性功能的几层组成。 输入是一个多元时间序列。 每层都将上一层的输出作为输入,并应用其非线性变换来计算自己的输出。

    The behavior of these non-linear transformations is controlled by a set of parameters for each layer. These parameters link the input of the layer to its output, and are trainable (like the weights of the Multi Layer Perceptron). Often, the last layer is a Multi Layer Perceptron or a Ridge regressor.

    这些非线性变换的行为由每一层的一组参数控制。 这些参数将图层的输入链接到其输出,并且是可训练的(如“多层感知器”的权重)。 通常,最后一层是多层感知器或Ridge回归器。

    In this artitcle 3 different Deep Learning Architecture for Time Series Classifications are presented:

    在本文章3中,介绍了用于时间序列分类的不同深度学习架构:

    • Convolutional Neural Networks, that are the most classical and used architecture for Time Series Classifications problems

      卷积神经网络 ,是时间序列分类问题中最经典和最常用的体系结构

    • Inception Time, that is a new architecure based on Convolutional Neural Networks

      起始时间 ,这是基于卷积神经网络的新架构

    • Echo State Networks, that are another recent architecure, based on Recurrent Neural Networks

      回声状态网络 ,这是基于递归神经网络的另一种最新架构

    卷积神经网络 (Convolutional Neural Networks)

    A Convolutional Neural Network is a Deep Learning algorithm that takes as input an image or a multivariate time series, is able to successfully capture the spatial and temporal patterns through the application trainable filters, and assigns importance to these patterns using trainable weights. The pre processing required in a Convolutional Neural Network is much lower as compared to other classification algorithms. While in many methods filters are hand-engineered, Convolutional Neural Network have the ability to learn these filters.

    卷积神经网络是一种深度学习算法,其将图像或多元时间序列作为输入,能够通过应用程序可训练的滤波器成功捕获空间和时间模式,并使用可训练的权重为这些模式分配重要性。 与其他分类算法相比,卷积神经网络所需的预处理要低得多。 尽管在许多方法中过滤器都是手工设计的,但是卷积神经网络却能够学习这些过滤器。

    Image for post

    As we can see in this Figure, a Convolutional Neural Network is composed of three different layers:

    如图所示,卷积神经网络由三个不同的层组成:

    • Convolutional Layer

      卷积层
    • Pooling Layer

      池化层
    • Fully-Connected Layer

      全连接层

    Usually several Convolutional Layers and Pooling Layers are alternated before the Fully-Connected Layer.

    通常,几个卷积层和池化层在完全连接层之前是交替的。

    卷积层 (Convolutional Layer)

    The convolution operation gives its name to the Convolutional Neural Networks because it’s the fundamental building block of this type of network. It performs a convolution of an input series of feature maps with a filter matrix to obtain as output a different series of feature maps, with the goal to extract the high-level features.

    卷积运算之所以被称为卷积神经网络,是因为它是此类网络的基本构建块。 它使用滤波器矩阵对输入的一系列特征图进行卷积,以获取不同系列的特征图作为输出,以提取高级特征。

    The convolution is defined by a set of filters, that are fixed size matrices. When a filter is applied to a submatrix of the input feature map with its same size, the result is given by the sum of the product of every element of the filter with the element in the same position of the submatrix (we can see this in this Figure).

    卷积由一组固定大小的过滤器定义。 当将过滤器以相同的大小应用于输入要素图的子矩阵时,结果由过滤器的每个元素与子矩阵中相同位置的元素的乘积之和得出(我们可以在此图)。

    Image for post

    The result of the convolution between one input feature map and one filter is the ordered feature map obtained applying the filter across the width and height of the input feature map, as in this Figure.

    一个输入要素图和一个过滤器之间的卷积结果就是有序特征图,该图是在输入特征图的宽度和高度上应用该过滤器而获得的,如图所示。

    Image for post

    A Convolutional Layer executes the convolution between every filter and every input feature map, obtaining as output a series of features maps. As already underlined, the values of the filters are considered as trainable weights and then are learned during training.

    卷积层执行每个过滤器和每个输入特征图之间的卷积,获得一系列特征图作为输出。 正如已经强调的那样,将过滤器的值视为可训练的权重,然后在训练过程中对其进行学习。

    Two important parameters that must be chosen for the Convolutional Layer are stride and padding.

    卷积层必须选择的两个重要参数是stridepadding

    大步走 (Stride)

    Stride controls how the filter convolves around one input feature map. In particular, the value of stride indicates how many units must be shifted at a time, how we can see in this Figure.

    步幅控制过滤器如何围绕一个输入要素图进行卷积。 特别是,跨步的值表示一次必须移动多少个单位,在该图中如何显示。

    Image for post

    填充 (Padding)

    Padding indicates how many extra columns and rows to add outside an input feature map, before applying a convolution filter, how we can see in this Figure. All the cells of the new columns and rows have a dummy value, usually 0.

    填充指示在应用卷积过滤器之前,要在输入要素图之外添加多少额外的列和行,我们如何在此图中看到。 新列和新行的所有单元格都有一个虚拟值,通常为0。

    Image for post

    Padding is used because when a convolution filter is applied to an input feature map, its size decreases. Then, after the application of many filter the size can become too small. Adding extra rows and columns we can preserve the original size, or make it decreasing slower.

    使用填充是因为将卷积滤镜应用于输入要素图时,其大小会减小。 然后,在应用许多过滤器之后,尺寸可能变得太小。 添加额外的行和列,我们可以保留原始大小,或者使其变慢。

    When the size of the feature map obtained after the application of the convolution filter is smaller than the size of the input feature map, we call this operation Valid Padding. When the output size is equal or grater of the input size, we call this operation Same Padding.

    当应用卷积滤波器后获得的特征图的大小小于输入特征图的大小时,我们将此操作称为有效填充。 当输出大小等于或大于输入大小时,我们将此操作称为相同填充。

    池化层 (Pooling Layer)

    The purpose of pooling operation is to achieve a dimension reduction of feature maps, preserving as much information as possible. It is useful also for extracting dominant features which are rotational and positional invariant. Its input is a series of feature maps and its output is a different series of feature maps, with lower dimension.

    池化操作的目的是实现特征图的降维,并保留尽可能多的信息。 这对于提取旋转和位置不变的主要特征也很有用。 它的输入是一系列特征图,其输出是不同系列的特征图,尺寸较小。

    Pooling is applied to sliding windows of fixed size across the width and height of every input feature map. There are two types of pooling: Max Pooling and Average Pooling. As we can see in the Figure, for every sliding window the result of the pooling operation is its maximum value or its average value, respectively for Max Pooling or Average Pooling.

    池化将应用于每个输入要素地图的宽度和高度固定大小的滑动窗口。 有两种类型的池:最大池和平均池。 从图中可以看出,对于每个滑动窗口,合并操作的结果分别是其最大值或平均值,分别是最大池化或平均池化。

    Image for post

    Max Pooling works also as a noise suppressant, discarding noisy activations altogether. Hence, it usually performs better than Average Pooling. Also for Pooling Layer stride and padding must be specified.

    Max Pooling还可以用作噪声抑制器,完全放弃了嘈杂的激活。 因此,它通常比平均池性能更好。 同样对于池化层,必须指定步幅和填充。

    The advantage of pooling operation is down-sampling the convolutional output bands, thus reducing variability in the hidden activations.

    合并操作的优点是对卷积输出带进行下采样,从而减少了隐藏激活的可变性。

    全连接层 (Fully-Connected Layer)

    The goal of the Fully-Connected Layer is to learn non-linear combinations of the high-level features represented by the output of the Convolutional Layer and the Pooling Layer. Usually the Fully Connected Layer is implemented with a Multi Layer Perceptron.

    全连接层的目标是学习由卷积层和池化层的输出表示的高级特征的非线性组合。 通常,完全连接层是使用多层感知器实现的。

    After several convolution and pooling operations, the original time series is represented by a series of feature maps. All these feature maps are flattened into a column vector, that is the final representation of the original input multivariate time series. The flattened column is connected to the Multi-Layer Perceptron, whose output has a number of neurons equal to the number of possible classes of time series.

    经过几次卷积和池化操作后,原始时间序列由一系列特征图表示。 所有这些特征图均被平整为列向量,即原始输入多元时间序列的最终表示。 扁平列连接到多层感知器,该感知器的输出所具有的神经元数量等于时间序列的可能类别的数量。

    Backpropagation is applied to every iteration of training. Over a series of epochs, the model is able to distinguish the input time series thanks to their dominant high-level features and to classify them.

    反向传播应用于训练的每个迭代。 在一系列时期中,该模型能够凭借其主要的高级功能来区分输入时间序列并对其进行分类。

    超参数 (Hyperparameters)

    For Convolutional Neural Networks neural network there are numerous hyperparameters to specify. The most important are the following:

    对于卷积神经网络神经网络,有许多要指定的超参数。 最重要的是以下内容:

    • Number of convolution filters - Obviously too few filters cannot extract enough features to achieve classification. However, more filters are helpless when the filters are already enough to represent the relevant features, and make the training more computationally expensive.

      卷积过滤器的数量-显然,太少的过滤器无法提取足够的特征来实现分类。 但是,当过滤器已经足以表示相关特征时,更多的过滤器将变得无能为力,并使训练在计算上更加昂贵。

    • Convolution filter size and initial values - Smaller filters collect as much local information as possible, bigger filters represent more global, high level and representative information. The filters are usually initialized with random values.

      卷积过滤器的大小和初始值 -较小的过滤器收集尽可能多的本地信息,较大的过滤器代表更多的全局,高级和代表性信息。 过滤器通常使用随机值初始化。

    • Pooling method and size - As already mentioned, there are two types of pooling: Max Pooling and Average Pooling, and Max Pooling usually performs better since it works also as noise suppressant. Also the pooling size is an important parameter to be optimized, since if the the pooling size increases, the dimension reduction is greater, but more informations are lost.

      池化方法和大小 -如前所述,池化有两种类型:“最大池化”和“平均池化”,“最大池化”通常表现更好,因为它也可以作为噪声抑制器。 而且,合并大小是要优化的重要参数,因为如果合并大小增加,则尺寸减小更大,但是会丢失更多信息。

    • Weight initialization - The weights are usually initialized with small random numbers to prevent dead neurons, but not too small to avoid zero gradient. Uniform distribution usually works well.

      重初始化 -权重通常使用较小的随机数进行初始化,以防止神经元死亡,但也不能太小,以免出现零梯度。 均匀分布通常效果很好。

    • Activation function - Activation function introduces non-linearity to the model. Rectifier, sigmoid or hyperbolic tangent are usually chosen.

      激活函数 -激活函数将非线性引入模型。 通常选择整流器,S形或双曲线正切。

    • Number of epochs - Number of epochs is the the number of times the entire training set pass through the model. This number should be increased until there is a small gap between the test error and the training error, if the computational performances allow it.

      时期数-时期数是整个训练集通过模型的次数。 如果计算性能允许,则应增加该数量,直到测试误差和训练误差之间存在很小的差距为止。

    实作 (Implementation)

    Building a Convolutional Neural Network is very easy using Keras. Keras is a simple-to-use but powerful deep learning library for Python. To build a Convolutional Neural Network in Keras are sufficient few steps:

    使用Keras,构建卷积神经网络非常容易。 Keras是一个简单易用但功能强大的Python深度学习库。 要在Keras中建立卷积神经网络,只需几个步骤:

    • First of all, declare a Sequential class; every Keras model is either built using the Sequential class, which represents a linear stack of layers, or the Model class, which is more flexible. Since a CNN is a linear stack of layers, we can use the simpler Sequential class;

      首先,声明一个顺序类; 每个Keras模型要么使用表示线性层堆栈的Sequential类构建,要么使用更灵活的Model类构建。 由于CNN是线性的图层堆栈,因此我们可以使用更简单的Sequential类;
    • Add the desired Convolutional, MaxPooling and Dense Keras Layers in the Sequential class;

      在Sequential类中添加所需的卷积,MaxPooling和Dense Keras层;
    • Specify number of filters and filter size for Convolutional Layer;

      指定卷积层的过滤器数量和过滤器大小;
    • Specify pooling size for Pooling Layer.

      为池化层指定池化大小。

    To compile the model, Keras needs more informations, that are:

    要编译模型,Keras需要更多信息,这些信息是:

    • input shape (once that the input shape is specified, Keras automatically infers theshapes of inputs for later layers);

      输入形状 (一旦指定了输入形状,Keras会自动推断出输入形状,供以后的图层使用);

    • optimizer (for example Stochastic gradient descent or Adagrad);

      优化器 (例如随机梯度下降或Adagrad);

    • loss function (for example mean squared error or mean absolute percentage error);

      损失函数 (例如均方误差或平均绝对百分比误差);

    • list of metrics (for example accuracy).

      指标列表 (例如准确性)。

    Training a model in Keras literally consists only of calling function fit() specifying the needed parameters, that are:

    从Keras训练模型实际上仅包括调用函数fit()来指定所需的参数,这些参数是:

    • training data (input data and labels),

      训练数据 (输入数据和标签),

    • number of epochs (iterations over the entire dataset) to train for,

      要训​​练的时期数 (整个数据集的迭代次数),

    • validation data, which is used during training to periodically measure the network’s performance against data it hasn’t seen before.

      验证数据 ,在训练期间用于根据以前从未见过的数据定期测量网络的性能。

    Using the trained model to make predictions is easy: we pass an array of inputs to the function predict() and it returns an array of outputs.

    使用训练有素的模型进行预测很容易:我们将输入数组传递给函数predict() ,并返回输出数组。

    开始时间 (Inception Time)

    Recently was introduced a deep Convolutional Neural Network called Inception Time. This kind of network shows high accuracy and very good scalability. The Architecture of an Inception Network is similar to the one of a Convolutional Neural Network, with the difference that Convolutional Layers and Pooling Layers are replaced with Inception Modules.

    最近,引入了一种称为“开始时间”的深层卷积神经网络。 这种网络显示出很高的准确性和很好的可扩展性。 Inception网络的体系结构类似于卷积神经网络的体系结构,不同之处在于,卷积层和池化层被Inception模块替代。

    Image for post

    As shown in this Figure, the Inception Network consists of a series of Inception Modules followed by a Global Average Pooling Layer and a Fully Conencted Layer (usually a Multi Layer Perceptron). Moreover, a residual connections is added at every third inception module. Each residual block’s input is transferred via a shortcut linear connection to be added to the next block’s input, thus mitigating the vanishing gradient problem by allowing a direct flow of the gradient.

    如该图所示,Inception网络由一系列Inception模块组成,其后是全局平均池层和完全浓缩层(通常是多层感知器)。 此外,在每个第三个启动模块处添加一个剩余连接。 每个残差块的输入都通过快捷线性连接进行传输,以添加到下一个块的输入,从而通过允许梯度的直接流动来减轻消失的梯度问题。

    初始模块 (Inception Module)

    The major building block of an Inception Network is the Inception Module, shown in this Figure.

    Inception网络的主要构建模块是Inception模块,如图所示。

    Image for post

    It consists of 4 Layers:

    它包括4层:

    • The first layer is a bottleneck layer, that reduces the dimensionality of the inputs. This reduces also the computational cost and the number of parameters, speeding up training and improving generalization.

      第一层是瓶颈层,它降低了输入的维数。 这也降低了计算成本和参数数量,加快了训练速度并提高了泛化能力。
    • The second major component of the Inception Module is a set of parallel Convolutional Layers of different size acting on the same input feature map. For example in the Figure there are three different convolutions with filter size 10, 20, and 40.

      盗取模块的第二个主要组件是一组作用在同一输入要素图上的大小不同的并行卷积层。 例如,在图中,存在三个不同的卷积,滤波器大小分别为10、20和40。
    • The third layer is a MaxPooling, that introduces the ability of having a model that is invariant to small perturbations.

      第三层是MaxPooling,它引入了具有对小扰动不变的模型的功能。
    • The fourth and last layer is a Depth Concatenation Layer, where the output of each independent parallel convolution and of the MaxPooling is concatenated to form the output multivariate time series of the current Inception Module.

      第四层也是最后一层是深度连接层,其中每个独立并行卷积和MaxPooling的输出被连接起来以形成当前Inception模块的输出多元时间序列。

    By stacking multiple Inception Modules and training the filters’ values via backpropagation, the network is able to extract latent hierarchical features of multiple resolutions thanks to the use of filters with different sizes. This is the big advantage of the Inception Module since it allows the internal layers to pick and choose which filter size is relevant to learn the required information. This is very helpful to identify a high-level feature that can have different sizes on different input feature maps.

    通过堆叠多个Inception模块并通过反向传播训练滤波器的值,由于使用了不同尺寸的滤波器,网络能够提取出多种分辨率的潜在分层特征。 这是Inception Module的一大优势,因为它允许内部层选择与选择哪个过滤器大小有关,以学习所需的信息。 这对于识别在不同输入要素地图上可能具有不同大小的高级要素非常有帮助。

    感受野 (Receptive Field)

    The key parameter to understand an Inception Network is its Receptive Field. Unlike fully-connected networks, a neuron in an Inception Network depends only on a region of the input features map. This region is called Receptive Field of the neuron. Clearly, bottom-layer neurons depend on regions that are smaller than those of top-layer. Then, bottom-layer neurons are expected to capture the local structure of a time series, while the top-layer neurons are expected to identify more complex patterns.

    理解Inception网络的关键参数是其接收域。 与完全连接的网络不同,Inception网络中的​​神经元仅取决于输入要素图的区域。 该区域称为神经元的感受野。 显然,底层神经元依赖于小于顶层神经元的区域。 然后,期望底层神经元捕获时间序列的局部结构,而期望顶层神经元识别更复杂的模式。

    For time series data, the total Receptive field of an Inception Network is defined from this formula, that depends only on the length of the filters k_i and on depth of the network d (that is the number of Inception Modules):

    对于时间序列数据,根据以下公式定义了接收网络的总接收场,该总接收场仅取决于滤波器的长度k_i和网络深度d (即接收模块的数量):

    Image for post

    It’s very interesting to investigate how the accuracy of an Inception Network changes as the Receptive Field varies. To vary the Receptive Field we can change the filter lengths or the depth of the network.

    研究接收网络随着接收场的变化如何变化的准确性非常有趣。 要改变接收场,我们可以改变滤波器的长度或网络的深度。

    This first Figure shows Inception Network’s accuracy over a simulation dataset, with respect to the filter length as well as the input time series length. From the chart it is evident that a longer filter is required to produce more accurate results. This is explained by the fact that longer filters are able to capture longer patterns with higher probability than shorter ones.

    第一张图显示了Inception Network在模拟数据集上相对于滤波器长度以及输入时间序列长度的准确性。 从图表中可以明显看出,需要更长的滤波器才能产生更准确的结果。 这是因为较长的过滤器比较短的过滤器能够以较高的概率捕获较长的模式。

    Image for post

    This second Figure shows Inception Network’s accuracy over a simulation dataset, with respect to the network’s depth as well as the length of the input time series. It turns out that increasing the Receptive Field by adding more layers doesn’t necessarily give an improvement of the network’s performance, especially for datasets with a small training set.

    第二张图显示了Inception Network在模拟数据集上的准确性,相对于网络的深度以及输入时间序列的长度而言。 事实证明,通过增加更多的图层来增加“接收域”并不一定会改善网络的性能,尤其是对于训练集较小的数据集而言。

    Image for post

    Hence these results suggest that in order to improve accuracy it’s better to increase the filter lengths instead of adding more layers.

    因此,这些结果表明,为了提高精度,最好增加滤波器的长度而不是增加更多的层。

    Another important aspect is that some experiments have shown that a single Inception Network sometimes exhibits high variance in accuracy. This is probably because of the variability given by the random weights initialization.

    另一个重要的方面是,一些实验表明单个Inception Network有时在准确性方面表现出很大的差异。 这可能是由于随机权重初始化给出的可变性。

    In order to overcome this instability, generally Inception Time is implemented as an ensemble of many Inception Networks, and every prediction has the same weight. In this way the algorithm improves his stability, and shows the already mentioned high accuracy and very good scalability. In particular different experiments have shown that its time complexity grows linearly with both the training set size and the time series length, and this is a very good result since many other algorithms grow quadratically with respect to the same magnitudes.

    为了克服这种不稳定性,通常将“开始时间”实现为许多“开始”网络的集合,并且每个预测都具有相同的权重。 这样,该算法提高了他的稳定性,并显示出已经提到的高精度和非常好的可伸缩性。 尤其是不同的实验表明,其时间复杂度随训练集大小和时间序列长度的增加而线性增加,这是一个很好的结果,因为许多其他算法相对于相同的幅度呈二次方增长。

    实作 (Implementation)

    A full implementation of Inception Time can be found on Github. The implementation is written in Python and uses Keras. This implementation is based on 3 main files:

    在Github上可以找到Inception Time的完整实现。 该实现是用Python编写的,并使用Keras。 此实现基于3个主要文件:

    • file main.py contains the necessary code to run an experiement;

      文件main.py包含运行实验所需的代码;

    • file inception.py contains the Inception Network implementation;

      文件inception.py包含Inception Network实现;

    • file nne.py contains the code that ensembles a set of Inception Networks.

      文件nne.py包含集成了一组Inception Networks的代码。

    In particular, the implementation uses the already mentioned Keras Module Class, since some layers of InceptionTime work in parallel, unlike Convolutional Neural Networks that uses Sequential Class since their layers are all in series.

    特别地,该实现使用已经提到的Keras模块类,因为InceptionTime的某些层是并行工作的,与使用顺序类的卷积神经网络不同,因为它们的层都是串联的。

    The code that implements the Inception Module building block is very similar to that described for Convolutional Neural Networks, since it uses Keras Layers for Convolution and MaxPooling, and hence it can be easily used or included in codes based on Keras in order to implement customized architectures.

    实现Inception Module构建块的代码与针对卷积神经网络描述的代码非常相似,因为它使用Keras层进行卷积和MaxPooling,因此可以轻松地使用它或将其包含在基于Keras的代码中,以实现定制的体系结构。

    递归神经网络 (Recurrent Neural Networks)

    Echo State Networks are a type of Recurrent Neural Networks, hence it can be useful a small introduction about them. Recurrent Neural Networks are networks of neuron-like nodes organized into successive layers, with an architecture similar to the one of standard Neural Networks. Infact, like in standard Neural Networks, neurons are divided in input layer, hidden layers and output layer. Each connection between neurons has a corresponding trainable weight.

    回声状态网络是递归神经网络的一种,因此对它们进行少量介绍可能会很有用。 递归神经网络是组织成连续层的类神经元节点的网络,其架构类似于标准神经网络之一。 实际上,就像在标准神经网络中一样,神经元分为输入层,隐藏层和输出层。 神经元之间的每个连接都具有相应的可训练权重。

    The difference is that in this case every neurons is assigned to a fixed timestep. The neurons in the hidden layer are also forwarded in a time dependent direction, that means that everyone of them is fully connected only with the neurons in the hidden layer with the same assigned timestep, and is connected with a one-way connection to every neuron assigned to the next timestep. The input and output neurons are connected only to the hidden layers with the same assigned timestep.

    不同之处在于,在这种情况下,每个神经元都分配有固定的时间步长。 隐藏层中的神经元也以时间相关的方向转发,这意味着它们中的每个人都仅以相同的分配时间步长完全与隐藏层中的神经元连接,并且通过单向连接与每个神经元连接分配给下一个时间步。 输入和输出神经元仅以相同的分配时间步长连接到隐藏层。

    Image for post

    Since the output of the hidden layer of one timestep is part of the input of the next timestep, the activation of the neurons is computed in time order: at any given timestep, only the neurons assigned to that timestep computes their activation.

    由于一个时间步长的隐藏层的输出是下一时间步长的输入的一部分,因此神经元的激活按时间顺序进行计算:在任何给定的时间步长,只有分配给该时间步长的神经元才计算其激活。

    Recurrent Neural Networks are rarely applied for Time Series Classification mainly due to three factors:

    归因于以下三个因素,递归神经网络很少用于时间序列分类:

    • The type of this architecture is designed mainly to predict an output for each element in the time series.

      这种体系结构的类型主要用于预测时间序列中每个元素的输出。
    • When trained on long time series, Recurrent Neural Networks typically suffer from the vanishing gradient problem, that means that the parameters in the hidden layers either don’t change that much or they lead to numeric instability and chaotic behavior.

      在经过长时间序列训练后,递归神经网络通常会遇到梯度消失的问题,这意味着隐藏层中的参数要么变化不大,要么导致数值不稳定和混乱行为。
    • The training of a Recurrent Neural Network is hard to parallelize, and is also computationally expensive.

      递归神经网络的训练很难并行化,并且在计算上也很昂贵。

    Echo State Networks were designed to mitigate the problems of Recurrent Neural Networks by eliminating the need to compute the gradient for the hidden layers, reducing the training time and avoiding the vanishing gradient problem. Infact many results show that Echo State Networks are really helpful to handle chaotic time series.

    回声状态网络旨在通过消除对隐藏层计算梯度的需求,减少训练时间并避免消失的梯度问题来缓解递归神经网络的问题。 实际上,许多结果表明,回声状态网络确实有助于处理混沌时间序列。

    回声州网络 (Echo State Networks)

    As shown in the Figure, the Architecture of an Echo State Network consists of an Input Layer, a hidden Layer called Reservoir, a Dimension Reduction Layer, a Fully Connected Layer called Readout, and an Output Layer.

    如图所示,回波状态网络的体系结构由输入层,称为存储层的隐藏层,降维层,称为读数的完全连接层和输出层组成。

    Image for post
    • The Reservoir is the main building block of an Echo State Network and is organized like a sparsely connected random Recurrent Neural Network.

      水库是回声状态网络的主要组成部分,其组织类似于稀疏连接的随机递归神经网络。
    • The Dimension Reduction algorithm is usually implemented with the Principal Component Analysis.

      降维算法通常通过主成分分析实现。
    • The Readout is usually implemented as Multi Layer Perceptron or a Ridge regressor.

      读数通常实现为多层感知器或Ridge回归器。

    The weights between the Input layer and the Reservoir and those in the Reservoir are randomly assigned and not trainable. The weights in the Readout are trainable, so that the network can learn and reproduce specific patterns.

    输入层和水库之间的权重以及水库中的权重是随机分配的,不可训练。 读数中的权重是可训练的,因此网络可以学习和重现特定的模式。

    水库 (Reservoir)

    Image for post

    As already mentioned, the Reservoir is organized like a sparsely connected random Recurrent Neural Network. The Reservoir is connected to the Input Layer, and consists in a set of internal sparsely-connected neurons, and in its own output neurons. In the Reservoir there are 4 types of weights:

    如前所述,水库的组织方式类似于稀疏连接的随机递归神经网络。 储层连接到输入层,由一组内部稀疏连接的神经元及其自身的输出神经元组成。 在水库中,有4种重量:

    • input weights between the Input Layer and the internal neurons;

      输入层和内部神经元之间的输入权重

    • internal weights, that connect the internal neurons to each other;

      内部权重,将内部神经元彼此连接;

    • output weights between the internal neurons and the output;

      内部神经元和输出之间的输出权重

    • backpropagation weights, that connect back the output to the internal neurons. All these weights are randomly initialized, are equal for every time step and are not trainable.

      反向传播权重 ,将输出连接回内部神经元。 所有这些权重都是随机初始化的,每个时间步均相等且不可训练。

    Like in RNNs, the output of the Reservoir is computed separately for every time step since the output of a time step is part of the input of the next time step. At every time step, the activation of every internal and output neuron is computed, and the output for the current timestep is obtained.

    像在RNN中一样,由于时间步长的输出是下一个时间步长的输入的一部分,因此每个时间步长都会分别计算水库的输出。 在每个时间步长,计算每个内部神经元和输出神经元的激活,并获得当前时间步长的输出。

    The big advantage of ESNs is that the Reservoir creates a recurrent non linear embedding of the input into a higher dimension representation, but since only the weights in the Readout are trainable, the training computation time remains low.

    ESN的一大优势在于,水库可以将输入重复非线性地嵌入到较高维度的表示中,但是由于只有读数中的权重是可训练的,因此训练计算时间仍然很短。

    降维 (Dimension Reduction)

    Many experiments show that choosing the correct dimension reduction it’s possible to reduce the execution time without lowering the accuracy. Moreover dimensional reduction provides a regularization that improves the overall generalization capability and robustness of the models. This Figure shows how training time and average classification accuracy of an Echo State Network vary with respect to the subspace dimension after dimension reduction, for a particular experiment.

    许多实验表明,选择正确的尺寸缩减可以在不降低精度的情况下减少执行时间。 此外,降维提供了一种正则化功能,可提高模型的整体归纳能力和鲁棒性。 该图显示了针对特定实验,降维后,回声状态网络的训练时间和平均分类精度相对于子空间维如何变化。

    Image for post

    It turns out that the training time increases almost linearly with the subspace dimension D, while it is evident that accuracy stops growing around D = 75. Hence in this case the better value for the subspace dimension would be 75, because, with a higher subspace dimension, we would have a longer execution time without relevant improvements in the accuracy.

    事实证明,训练时间几乎随子空间维数D线性增加,而显然精度在D = 75附近停止增长。因此,在这种情况下,子空间维数的更好值为75,因为子空间维数更大尺寸,我们将需要更长的执行时间,而不会在准确性方面进行相应的改进。

    实现和超参数 (Implementation and Hyperparameters)

    A full implementation in Python of Echo State Networks is available on Github. The code uses the libraries Scikit-learn and SciPy. The main class RC_classifier contained in the file modules . py permits to build, train and test a Reservoir Computing classifier, that is the family of algorithms to which the Echo State Networks belong.

    Github上提供了Echo State Networks的Python完整实现。 该代码使用Scikit-learn和SciPy库。 主要模块RC_classifier包含在文件模块中。 py允许构建,训练和测试Reservoir Computing分类器,这是Echo状态网络所属的算法系列。

    The hyperparameters requested for the Reservoir must be optimized in order to obtain the desired accuracy and the desired performance for the execution time; the most important are:

    必须优化为水库请求的超参数,以便在执行时间内获得所需的精度和所需的性能。 最重要的是:

    • the number of neurons in the Reservoir;

      水库中神经元的数量;
    • the percentage of nonzero connection weights (usually less then 10%);

      非零连接权重的百分比(通常小于10%);
    • the largest eigenvalue of the reservoir matrix of connection weights.

      连接权重的储层矩阵的最大特征值。

    The most important hyperparameters in other layers are:

    其他层中最重要的超参数是:

    • the algorithm for Dimensional Reduction Layer (that can be None or tensorial PCA for multivariate time series data);

      降维层算法(对于多元时间序列数据,可以为None或张量PCA);
    • the subspace dimension after the Dimension Reduction Layer;

      降维层之后的子空间尺寸;
    • the type of Readout used for classification (Multi Layer Perceptron, Ridge regression, or SVM);

      用于分类的读数类型(多层感知器,岭回归或SVM);
    • the number of epochs, that is the number iterations during the optimization.

      纪元数,即优化过程中的迭代次数。

    The structure of the code that implements training and uses of the model is very similar to that described for Convolutional Neural Networks.

    实现模型训练和使用的代码结构与卷积神经网络非常相似。

    结论 (Conclusions)

    Convolutional Neural Networks are the most popular Deep Learning technique for Time Series Classifications, since they are able to successfully capture the spatial and temporal patterns through the use of trainable filters, assigning importance to these patterns using trainable weights.

    卷积神经网络是用于时间序列分类的最流行的深度学习技术,因为它们能够通过使用可训练的滤波器成功捕获空间和时间模式,并使用可训练的权重将这些模式赋予重要性。

    The main difficulty in using CNNs is that they are very dependent on the size and quality of the training data. In particular, the length of the time series can slow down training, and results can be not accurate as expected with chaotic input time series or with input time series in which the same relevant feature can have different sizes. To solve this problems, many new algorithms were recently elaborated, and among these InceptionTime and Echo State Networks perform better than the others.

    使用CNN的主要困难在于,它们非常依赖于训练数据的大小和质量。 特别是,时间序列的长度可能会减慢训练速度,并且结果可能无法如混乱的输入时间序列或具有相同相关特征可以具有不同大小的输入时间序列所预期的那样准确。 为了解决这个问题,最近开发了许多新算法,其中InceptionTime和Echo State Networks的性能要优于其他算法。

    InceptionTime is derived from Convolution Neural Networks and speeds up the training process using an efficient dimension reduction in the most important building block, the Inception Module. Moreover it performs really well in handling input time series in which the same relevant feature can have different sizes.

    InceptionTime是从卷积神经网络派生而来的,它通过在最重要的构建模块Inception模块中有效地减少尺寸来加快训练过程。 此外,它在处理输入时间序列(其中相同的相关要素可以具有不同的大小)方面表现非常好。

    Echo State Networks are based on Recurrent Neural Networks, and speed up the training process because they are very sparsely connected, with most of their weights fixed a priori to randomly chosen values. Thanks to this, they demonstrate remarkable performances after very fast training. Moreover they are really helpful to handle chaotic time series.

    Echo State Networks are based on Recurrent Neural Networks, and speed up the training process because they are very sparsely connected, with most of their weights fixed a priori to randomly chosen values. Thanks to this, they demonstrate remarkable performances after very fast training. Moreover they are really helpful to handle chaotic time series.

    Hence, in conclusion, high accuracy and high scalability make these new architectures the perfect candidate for product development.

    Hence, in conclusion, high accuracy and high scalability make these new architectures the perfect candidate for product development.

    翻译自: https://medium.com/@marcodelpra/time-series-classification-with-deep-learning-d238f0147d6f

    展开全文
  • 问题描述:有一批tsv格式(或csv格式)的时间序列数据和标签,需要搭建神经网络对其进行分类。 语言:python 数据:数据为tsv格式,可以用excel打开,第0列为类别,第1列往后为时间序列数据 程序代码: ...

    问题描述:有一批tsv格式(或csv格式)的时间序列数据,需要按照标签进行分类
    所用语言:python
    数据类型:tsv格式,可以用Excel打开,数据的第0列为类别标签,第1列往后为时间序列数据。
    在这里插入图片描述
    代码中用到的示例数据下载地址:时间序列示例数据
    代码:

    from __future__ import print_function
     
    from keras.models import Model
    from keras.utils import np_utils
    import numpy as np
    import pandas as pd
    import keras 
    from keras.callbacks import ReduceLROnPlateau
    import matplotlib.pyplot as plt
          
    
    #训练次数
    nb_epochs = 1000
    
    #读取训练集和测试集、标签
    #第0列为标签
    #第1列往后为数据
    x_train = np.loadtxt('./Adiac/Ham_TRAIN.tsv', delimiter = '\t')[:,1:]#tsv文件中使用\t作为分隔符,如果是csv文件使用‘,’作为分隔符就把这里的关键字改一下
    y_train = np.loadtxt('./Adiac/Ham_TRAIN.tsv', delimiter = '\t')[:,0]
    x_test = np.loadtxt('./Adiac/Ham_TEST.tsv', delimiter = '\t')[:,1:]
    y_test = np.loadtxt('./Adiac/Ham_TEST.tsv', delimiter = '\t')[:,0]
    
    
    
    #有几个类别,np.nique函数是去除数组中的重复数字
    nb_classes = len(np.unique(y_test))
    #设定批的大小,//表示整除
    batch_size = min(x_train.shape[0]//10, 16)
    
    #归一化
    y_train = (y_train - y_train.min())/(y_train.max()-y_train.min())*(nb_classes-1)
    y_test = (y_test - y_test.min())/(y_test.max()-y_test.min())*(nb_classes-1)
    
    #转换为独热编码
    Y_train = np_utils.to_categorical(y_train, nb_classes)
    Y_test = np_utils.to_categorical(y_test, nb_classes)
    
    x_train_mean = x_train.mean()
    #std代表标准差
    x_train_std = x_train.std()
    #z-score标准化
    x_train = (x_train - x_train_mean)/(x_train_std)
    
    x_test = (x_test - x_train_mean)/(x_train_std)
    
    x_train = x_train.reshape(x_train.shape + (1,1,))
    x_test = x_test.reshape(x_test.shape + (1,1,))
    
    x = keras.layers.Input(x_train.shape[1:])
    #    drop_out = Dropout(0.2)(x)
    conv1 = keras.layers.Conv2D(128, 8, 1, border_mode='same')(x)
    conv1 = keras.layers.normalization.BatchNormalization()(conv1)
    conv1 = keras.layers.Activation('relu')(conv1)
    
    #    drop_out = Dropout(0.2)(conv1)
    conv2 = keras.layers.Conv2D(256, 5, 1, border_mode='same')(conv1)
    conv2 = keras.layers.normalization.BatchNormalization()(conv2)
    conv2 = keras.layers.Activation('relu')(conv2)
    
    #    drop_out = Dropout(0.2)(conv2)
    conv3 = keras.layers.Conv2D(128, 3, 1, border_mode='same')(conv2)
    conv3 = keras.layers.normalization.BatchNormalization()(conv3)
    conv3 = keras.layers.Activation('relu')(conv3)
    
    full = keras.layers.pooling.GlobalAveragePooling2D()(conv3)    
    out = keras.layers.Dense(nb_classes, activation='softmax')(full)
    
    
    model = Model(input=x, output=out)
    
    optimizer = keras.optimizers.Adam()
    model.compile(loss='categorical_crossentropy',
                  optimizer=optimizer,
                  metrics=['accuracy'])
    
    reduce_lr = ReduceLROnPlateau(monitor = 'loss', factor=0.5,
                      patience=50, min_lr=0.0001) 
    history = model.fit(x_train, Y_train, batch_size=batch_size, nb_epoch=nb_epochs,
              verbose=1, validation_data=(x_test, Y_test), callbacks = [reduce_lr])
    model.save('FCN_CBF_1500.h5')
    acc = history.history['acc']
    val_acc = history.history['val_acc']
    loss = history.history['loss']
    val_loss = history.history['val_loss']
    
    epochs = range(len(acc))
    
    plt.plot(epochs, acc, 'bo', label='Training acc')
    plt.plot(epochs, val_acc, 'b', label='Validation acc')
    plt.title('Training and validation accuracy')
    plt.legend()
    
    plt.figure()
    
    plt.plot(epochs, loss, 'bo', label='Training loss')
    plt.plot(epochs, val_loss, 'b', label='Validation loss')
    plt.title('Training and validation loss')
    plt.legend()
    
    plt.show()
    
    

    结果:
    训练1000次后,
    在这里插入图片描述
    在这里插入图片描述

    另外一个版本的代码:
    (更详细)转自格拉迪沃的博客
    数据存放路径:
    数据放在Ham文件夹下(包括训练集和测试集),代码放在文件夹外面,与文件夹并列。
    或者直接更改代码中的路径即可。

    #!/usr/bin/env 
    # -*- coding: utf-8 -*-
    """
    Created on Sun Oct 30 20:11:19 2016
    
    @author: stephen
    """
     
    from __future__ import print_function
     
    from keras.models import Model
    from keras.utils import np_utils
    import numpy as np
    import pandas as pd
    import keras 
    from keras.callbacks import ReduceLROnPlateau
    import matplotlib.pyplot as plt
          
    def readucr(filename):
        data = np.loadtxt(filename, delimiter = '\t')#tsv文件中使用\t作为分隔符,如果是csv文件使用‘,’作为分隔符就把这里的关键字改一下
        Y = data[:,0]#第0列为标签
        X = data[:,1:]#第1列往后为数据
        return X, Y
      
    nb_epochs = 1000
    
    #根据需要把这里的文件夹名字做更改,diac是众多数据集中的一个。
    flist  = ['Ham']
    for each in flist:
        fname = each
        x_train, y_train = readucr(fname+'/'+fname+'_TRAIN.tsv')
        x_test, y_test = readucr(fname+'/'+fname+'_TEST.tsv')
        nb_classes = len(np.unique(y_test))
        batch_size = min(x_train.shape[0]/10, 16)
        
        y_train = (y_train - y_train.min())/(y_train.max()-y_train.min())*(nb_classes-1)
        y_test = (y_test - y_test.min())/(y_test.max()-y_test.min())*(nb_classes-1)
        
        
        Y_train = np_utils.to_categorical(y_train, nb_classes)
        Y_test = np_utils.to_categorical(y_test, nb_classes)
        
        x_train_mean = x_train.mean()
        x_train_std = x_train.std()
        x_train = (x_train - x_train_mean)/(x_train_std)
         
        x_test = (x_test - x_train_mean)/(x_train_std)
        x_train = x_train.reshape(x_train.shape + (1,1,))
        x_test = x_test.reshape(x_test.shape + (1,1,))
    
        x = keras.layers.Input(x_train.shape[1:])
    #    drop_out = Dropout(0.2)(x)
        conv1 = keras.layers.Conv2D(128, 8, 1, border_mode='same')(x)
        conv1 = keras.layers.normalization.BatchNormalization()(conv1)
        conv1 = keras.layers.Activation('relu')(conv1)
        
    #    drop_out = Dropout(0.2)(conv1)
        conv2 = keras.layers.Conv2D(256, 5, 1, border_mode='same')(conv1)
        conv2 = keras.layers.normalization.BatchNormalization()(conv2)
        conv2 = keras.layers.Activation('relu')(conv2)
        
    #    drop_out = Dropout(0.2)(conv2)
        conv3 = keras.layers.Conv2D(128, 3, 1, border_mode='same')(conv2)
        conv3 = keras.layers.normalization.BatchNormalization()(conv3)
        conv3 = keras.layers.Activation('relu')(conv3)
        
        full = keras.layers.pooling.GlobalAveragePooling2D()(conv3)    
        out = keras.layers.Dense(nb_classes, activation='softmax')(full)
        
        
        model = Model(input=x, output=out)
         
        optimizer = keras.optimizers.Adam()
        model.compile(loss='categorical_crossentropy',
                      optimizer=optimizer,
                      metrics=['accuracy'])
         
        reduce_lr = ReduceLROnPlateau(monitor = 'loss', factor=0.5,
                          patience=50, min_lr=0.0001) 
        history = model.fit(x_train, Y_train, batch_size=batch_size, nb_epoch=nb_epochs,
                  verbose=1, validation_data=(x_test, Y_test), callbacks = [reduce_lr])
        model.save('FCN_CBF_1500.h5')
    acc = history.history['acc']
    val_acc = history.history['val_acc']
    loss = history.history['loss']
    val_loss = history.history['val_loss']
    
    epochs = range(len(acc))
    
    plt.plot(epochs, acc, 'bo', label='Training acc')
    plt.plot(epochs, val_acc, 'b', label='Validation acc')
    plt.title('Training and validation accuracy')
    plt.legend()
    
    plt.figure()
    
    plt.plot(epochs, loss, 'bo', label='Training loss')
    plt.plot(epochs, val_loss, 'b', label='Validation loss')
    plt.title('Training and validation loss')
    plt.legend()
    
    plt.show()
    
    

    运行结果:
    在这里插入图片描述

    展开全文
  • 基于深度学习时间序列分类研究综述[论文阅读]

    万次阅读 多人点赞 2019-03-15 10:22:22
    时间序列分类研究简介核心论文写在前面的话原文概述摘要1引言2背景2.1时间序列分类2.2基于深度学习时间序列分类2.3生成性或判别性方法生成模型判别模型3方法3.1为什么判别的端到端方法?3.2方法比较完全卷积神经...

    核心论文

    《Deep learning for time series classification: a review》
    【作者】 Hassan Ismail Fawaz; Germain Forestier; Jonathan Weber; Lhassane Idoumghar;
    【期刊名】Statistics
    【年份】2018

    写在前面的话

    本人将此论文阅读后,提取了介绍性的东西,针对性的做了一些翻译和摘要。近些年来,关于时间序列分类问题大多都是用传统机器学习方法进行研究,很少人使用深度学习模型。因而本篇论文就是针对深度学习模型在时间序列中的使用进行了系统的整理,并尝试解决如下问题:
    TSC目前最先进的DNN是什么?
    当前的DNN方法是否达到TSC非DNN的最先进性能并且不如它复杂?
    哪种类型的DNN架构最适合TSC任务?
    随机初始化如何影响深度学习分类器的性能?
    是否可以避免DNN的黑盒效应以提供可解释性?

    原文概述

    摘要

    摘要:时间序列分类(TSC)是数据挖掘中一个重要且具有挑战性的问题。随着时间序列数据可用性的增加,已经提出了数百种TSC算法。在这些方法中,只有少数人考虑过深度神经网络(DNN)来执行这项任务。 DNN确实彻底改变了计算机视觉领域,特别是随着新的更深层架构如残余和卷积神经网络的出现。除了图像之外,还可以使用DNN处理诸如文本和音频之类的顺序数据,以达到用于文档分类和语音识别的最先进性能。在本文中,我们简介TSC最新DNN架构,研究了TSC深度学习算法的当前最新性能。在此概述了在统一的TSN分类标准下,TSC中各个时间序列域中最成功的深度学习应用程序。

    1引言

    在过去的二十年中,时间序列分类(TSC)被认为是数据挖掘中最具挑战性的问题之一。随着时间数据可用性的增加(Silva等,20181),自2015年以来已经提出了数百种TSC算法(Bagnall等,20172)。由于它们的自然时间顺序,时间序列数据几乎存在于需要某种人类认知过程的每项任务中(Längkvist等,20143)。事实上,任何分类问题,使用的数据考虑到次序这一概念,都可以被视为TSC问题(Cristian Borges Gamboa,20174)。在许多现实世界的应用中都会遇到时间序列,从电子健康记录和人类活动识别到声学场景分类和网络安全。此外,UCR / UEA档案中数据集类型的多样性(最大的时间序列数据集库)显示了TSC问题的不同应用。

    鉴于需要对时间序列数据进行准确分类,研究人员提出了数百种方法来解决这一问题(Bagnall,20172)。最流行和传统的TSC方法之一是使用最近邻(NN)分类器和距离函数(Lines和Bagnall,20155)。特别是与NN分类器一起使用时的动态时间扭曲(DTW)距离已被证明是一个非常强的基线(Bagnall,20176)。 Lines和Bagnall(2015)对几种距离测量进行了比较,结果显示没有单一的距离测量值明显优于DTW。他们还表明,对各个NN分类器(具有不同的距离测量)进行整合优于所有整体的各个组件。因此,最近的贡献集中于开发明显优于NN加上DTW(NN-DTW)的集合方法。这些方法使用决策树集合(随机森林)(Baydogan等人,2013; Deng等人,2013)或在一个或多个特征空间上用不同类型的判别分类器(支持向量机(SVM),具有多个距离的NN)的集合(Bagnall等,2016; Bostrom和Bagnall,2015)。大多数这些方法明显优于NN-DTW(Bagnall等,2017)并且共享一个共同属性,即数据转换阶段,其中时间序列被转换为新的特征空间(例如使用shapelets变换(Bostrom和Bagnall) ,2015)或DTW功能(Kate,2016))。这个概念推动了35个分类器的集合的发展,这些分类器命名为COTE(基于转换的集合)(Bagnall等,20167),它不仅在同一变换上集合了不同的分类器,而且在不同的时间序列表示中集合了不同的分类器。 Lines等(2016年,2018年8)使用分层投票系统扩展COTE成为HIVE-COTE,通过利用具有概率投票的新分层结构,包括两个新的分类器和两个额外的表示转换域,已经证明它可以实现对COTE的显着改进。当对来自UCR / UEA档案的85个数据集进行评估时,HIVE-COTE目前被认为是时间序列分类的最先进算法(Bagnall等,2017)

    为了实现高精度,HIVE-COTE变得非常计算密集,并且在真正的大数据挖掘问题上运行是不切实际的(Bagnall等,2017)。该方法需要训练37个分类器以及交叉验证这些算法的每个超参数,这使得该方法在某些情况下无法进行训练(Lucas等,2018)。为了强调这种不可行性,请注意这37个分类器中的一个是Shapelet变换(Hills等,2014),其时间复杂度为O(n2l2n^2*l^2),n为数据集中的时间序列数,l是时间序列的长度。加上训练时间的复杂性是37个分类器之一的高分类时间:在测试时做出决定之前需要扫描训练集的最近邻居。因此,由于最近邻居构成了HIVE-COTE的重要组成部分,因此即使不是不切实际,其在实时环境中的部署仍然是有限的。最后,增加了HIVE-COTE的巨大运行时间,37个分类器所做出的决定无法轻易解释领域专家,因为研究人员已经很难理解个别分类器所做的决定。

    在为TSC建立了当前最先进的非深度分类器之后(Bagnall et al,2017),我们讨论了深度学习(LeCun等人,20159)在各种分类任务中的成功,这些任务激发了最近的利用深度学习模型进行TSC(Wang et al,2017b10)。深度卷积神经网络(CNNs)彻底改变了计算机视觉领域(Krizhevsky等,2012)。例如,在2015年,CNN用于在图像识别任务中的表现达到了人类水平(Szegedy等,2015)。随着计算机视觉中深度神经网络(DNN)的成功,大量的研究提出了几种DNN架构来解决自然语言处理(NLP)任务,如机器翻译(Sutskever等,2014; Bahdanau等,2015) ),学习单词嵌入(Mikolov等,2013; Mikolov等,2013)和文档分类(Le和Mikolov,2014; Goldberg,2016)。 DNN也对语音识别社区产生了巨大影响(Hinton等,2012; Sainath等,2013)。有趣的是,我们应该注意到NLP和语音识别任务之间的内在相似性是由于数据的顺序方面,这也是时间序列数据的主要特征之一。

    在此背景下,本文针对以下开放性问题:
    TSC目前最先进的DNN是什么?
    当前的DNN方法是否达到TSC的最先进性能并且不如HIVECOTE复杂?
    哪种类型的DNN架构最适合TSC任务?
    随机初始化如何影响深度学习分类器的性能?
    最后:是否可以避免DNN的黑盒效应以提供可解释性?
    鉴于TSC社区尚未解决后面的问题,令人惊讶的是,最近有多篇论文忽略了使用纯特征学习算法解决TSC问题的可能性(Neamtu等,2018; Bagnall等, 2017; Lines等,2016)。事实上,最近的一项实证研究(Bagnall等,2017)在85个时间序列数据集上评估了18种TSC算法,其中没有一种是深度学习模型。这表明圈内缺乏对解决TSC问题的深度学习模型当前表现的概述(Lines et al,2018)。

    在本文中,我们对最新的TSC深度学习方法进行了实证比较研究。 随着图形处理单元(GPU)的兴起,我们展示了如何有效地训练深层架构,以便以端到端的方式从原始时间序列中学习隐藏的判别特征。 与Bagnall等人(2017年)类似,为了在测试方法之间进行公平比较,我们在Python,Keras(Chollet,2015)和Tensorflow(Abadi等人,2015)中开发了一个共同框架来训练深度学习超过60个GPU的集群上的模型。

    除了单变量数据集的评估,我们还测试了12个多变量时间序列(MTS)数据集的方法(Baydogan,2015)。 多变量评估显示了深度学习模型的另一个好处,即通过利用组成函数中不同程度的平滑度来处理维数灾难的能力(Bellman,2010; Keogh和Mueen,2017)(Poggio等,2017) 以及GPU的并行计算(Lu et al。,2015)。

    在这项研究中,我们在97个单变量和多变量时间序列数据集中训练了大约10亿个参数。 尽管大量参数由于UCR / UEA档案中相对较小的训练集存在过度拟合(Zhang et al.,201711),我们的实验表明,不仅DNN能够明显优于NN-DTW,而且 使用深度残差网络架构也能够获得与COTE和HIVE-COTE没有显着差异的结果(He等,2016; Wang等,2017b)。 最后,我们分析了差的随机初始化如何对DNN的性能产生重大影响。

    本文的其余部分的结构如下。在第2节中,我们提供了一些有关为TSC提出的主要架构类型的背景资料。在第3节中,测试的体系结构将单独详细介绍。我们在第4节中描述了我们的实验性开源框架。相应的结果和讨论在第5节中介绍。在第6节中,我们详细描述了一些减轻深度学习模型的黑盒效应的方法。最后,我们在第7节中总结了我们的发现并讨论了未来的发展方向。
    本文的主要贡献可归纳如下:

    • 我们用实际例子解释,深度学习如何适应一维时间序列数据。
    • 我们提出了一个统一的分类法,它将TSN最近在各个领域的DNN应用重新组合在两个主要类别下:生成模型和判别模型。
    • 我们详细介绍了专为TSC设计的九种端到端深度学习模型的架构。
    • 我们在单变量UCR / UEA档案基准和12个MTS分类数据集上评估这些模型。
    • 我们为社区提供了一个针对TSC的开源深度学习框架,我们在其中实施了所有九种方法。
    • 我们研究了类激活图(CAM)的使用,以减少DNN的黑盒效应,并解释各种模型所做出的不同决策。

    2背景

    在本节中,我们首先介绍必要的定义以便于理解。然后,我们将继续介绍有关TSC任务的DNN培训的广泛理论背景。 最后,我们提出了我们对不同DNN的分类,并举例说明了它们在各种现实世界数据挖掘问题中的应用。

    2.1时间序列分类

    在介绍不同类型的神经网络架构之前,我们先介绍一些TSC的正式定义。
    定义1 单变量时间序列 X=[x1,x2,...,xT]X =[x_1,x_2,...,x_T] 是一组有序的实数值。 XX的长度等于实数TT的值。
    定义2 MMMTSMTSX=[X1,X2,...,XM]X = [X^1,X^2,...,X^M] 是由MM个不同的时间序列XiRTX^i\in\mathbb R^T组成。
    定义3 一个数据集DD = {(X1,Y1),(X2,Y2),...(XN,YN)}\left\{(X_1,Y_1),(X_2,Y_2),...(X_N,Y_N)\right\}(Xi,Yi)(X_i,Y_i)的集合,其中XiX_i既可以是单变量时间序列也可以是多变量时间序列,而YiY_i是其对应的one-hot编码标签。
    TSC的任务就是在数据集D上训练分类器,以便从可能输入的空间映射到类变量值(标签)上的概率分布。
    在这里插入图片描述

    2.2基于深度学习的时间序列分类

    (原文给出了多层感知器(MLP),卷积神经网络(CNN)和回声状态网络(ESN)三种模型理论,这里只简介卷积神经网络)
    自AlexNet(Krizhevsky等人,2012)在2012年赢得ImageNet竞赛以来,深度CNN在许多不同领域(LeCun等人,2015)已经看到了很多成功的应用,例如在图像识别问题上达到人类水平的表现(Szegedy) 等人,2015)以及不同的自然语言处理任务。 由于这些CNN架构在这些不同领域的成功,研究人员已经开始采用它们进行时间序列分析(Cristian Borges Gamboa,201712)。

    卷积可以被视为在时间序列上应用和滑动滤波器。 与图像不同,滤镜仅显示一个维度(时间)而不是两个维度(宽度和高度)。 滤波器也可以看作是时间序列的通用非线性变换。 具体地说,如果我们将长度为3的滤波器与单变量时间序列进行卷积(相乘),则将滤波器值设置为等于[13,13,13][\frac{1}{3}, \frac{1}{3}, \frac{1}{3}],卷积将导致应用具有长度为3的滑动窗口的移动平均值。将卷积应用于居中时间戳t的一般形式在下面的等式中给出:
    Ct=f(ωXtl/2:t+l/2+b)t[1,T] C_t = f(\omega*X_{t-l/2:t+l/2}+b) | \forall t \in [1,T]
    其中C表示的是长度为T的单变量时间序列X和长度为ll的滤波器ω\omega上应用的卷积(点积), 然后添加偏置b,最后输入到非线性激活函数例如整流线性单元(ReLU)中的结果。 一个时间序列X上的卷积(一个滤波器)的结果可以被认为是经历滤波处理的另一个单变量时间序列C. 因此,在时间序列上应用多个滤波器将产生多变量时间序列,其维度等于所使用的滤波器的数量。 在输入时间序列上应用多个过滤器的方法可以学习多个判别特征,这对分类任务有很大帮助。

    与MLP不同,相同的卷积(相同的滤波器值w和b)将用于查找所有时间戳的结果t[1,T]t \in [1,T]。 这是CNN的一个非常强大的属性(称为权重共享),使他们能够学习在时间维度上不变的过滤器。

    当考虑将MTS作为卷积层的输入时,滤波器不再具有一个维度(时间),而且具有等于输入MTS的维度数量的维度。

    最后,不应手动设置过滤器的值 ω\omega,应自动学习这些值,因为它们高度依赖于目标数据集。 例如,一个数据集的最佳过滤器等于[1,2,2]而另一个数据集的最佳滤波器等于[2,0,-1]。对于最优我们指的是一个过滤器,其应用程序将使分类器能够轻松区分数据集种类。 为了自动学习一个判别过滤器,卷积后面应该是一个判别分类器,通常先是一个池化操作,可以是局部的也可以是全局的。

    诸如平均或最大池的本地池化采用输入时间序列并通过在其滑动窗口上聚合来减小其长度T. 例如,如果滑动窗口的长度等于3,则得到的合并时间序列将具有等于 T3\frac{T}{3} 的长度 这仅在步幅等于滑动窗口的长度时才为真。 通过全局池化操作,时间序列将在整个时间维度上聚合,从而产生单个实际值。 换句话说,这类似于应用滑动窗口长度等于输入时间序列长度的本地池化。 通常采用全局聚合来大幅减少模型中参数的数量,从而降低过度拟合的风险,同时允许使用CAM来解释模型的决策(Zhou et al,2016)。

    除了池化层,一些深度学习架构还包括归一化层,以帮助网络快速收敛。 对于时间序列数据,批量归一化操作在每个通道上执行,因此防止内部协变量在一个小批量时间序列培训中转移(Ioffe和Szegedy,2015)。 Ulyanov等人提出了另一种归一化方法(2016)标准化每个实例而不是每批次,从而通过梯度下降学习每个层的每个训练实例的平均值和标准偏差。 后一种方法称为实例标准化,并模拟学习时间序列训练数据的z标准化参数。(各种归一化参考这里)

    最终的判别层采用输入时间序列的表示(卷积的结果),并给出数据集中类变量的概率分布。 通常,该层由与MLP类似的softmax操作组成。 请注意,对于某些方法,我们在最终的softmax层之前会有一个额外的非线性FC层,这会增加网络中的参数数量。 最后,为了训练和学习深CNN的参数,该过程与训练MLP相同:前馈传递,然后是反向传播。 具有三个卷积层的TSC的CNN架构的示例在下图中示出。
    在这里插入图片描述

    2.3生成性或判别性方法

    TSC的深度学习方法可以分为两大类:生成模型和判别模型(如Längkvist et al等人(2014)13所提出的)。 我们进一步将这两个组分成子组,这些子组在以下小节中详述

    生成模型

    生成模型通常会在分类器的学习阶段之前进行无监督的训练(Längkvist et al.等,2014)。 这种类型的网络在TSC社区中被称为基于模型的分类器(Bagnall等,2017)。 这些生成性非深度学习方法中的一些包括自回归模型(Bagnall和Janacek,2014),隐马尔可夫模型(Kotsifakos和Papapetrou,2014)和核模型(Chen等,2013)。

    对于所有生成方法,目标是在训练分类器之前找到时间序列的良好表示(Längkvist et al等,2014)。通常,为了对时间序列建模,分类器之前是无监督的预训练阶段,例如堆叠去噪自动编码器(SDAE)(Bengio等人,2013; Hu等人,2016)。 Wang等人提出了一种基于CNN的生成模型(2016b); Mittelman(2015)作者介绍了一种去卷积运算,然后是一种有助于重建多变量时间序列的上采样技术。深度信念网络(DBNs)也被用于以无人监督的方式对潜在特征进行建模,然后利用这些特征对单变量和多变量时间序列进行分类(Wang等,2017a; Banerjee等,2017)。在 Mehdiyev et al. (2017); Malhotra et al. (2018); Rajan and Thiagarajan (2018),RNN自动编码器被设计为首先生成时间序列然后使用学习的潜在表示,他们在这些表示之上训练分类器(例如SVM或随机森林)来预测给定输入时间序列的类别。

    其他研究,如Aswolinskiy等(2017); 比安奇等人(2018); Chouikhi等(2018)Ma等人(2016)使用自我预测建模进行时间序列分类,其中ESN首先用于重建时间序列,然后利用储层空间中的学习表示进行分类。 我们在图5中通过传统的ESN来引用这种类型的体系结构。其他基于ESN的方法(Chen et al.,2015a,2013; Che et al。,2017b)定义了学习表示的核心,然后是SVM或MLP分类。 在Gong等人(2018); 王等人(2016),提出了一种基于元学习进化的算法来构建单变量和多变量时间序列的最优ESN体系结构。 有关TSC的生成性ESN模型的更多细节,我们将感兴趣的读者引用到最近的一项实证研究(Aswolinskiy等,2016),该研究比较了多变量和单变量时间序列的储层和模型空间的分类。

    判别模型

    判别式深度学习模型是一种可以直接学习时间序列的原始输入(或其手工设计的特征)与数据集中的类变量的概率分布之间映射的分类器。 已经提出了几种有辨别力的深度学习架构来解决TSC任务,但是我们发现这种类型的模型可以进一步细分为两组:(1)具有手工设计特征的深度学习模型和(2)端到端 深度学习模型。

    手工工程方法中最常遇到的和计算机视觉启发的特征提取方法是使用特定成像方法将时间序列转换为图像,例如Gramian字段(Wang和Oates,2015b,a),复发图(Hatami等,2017) ; Tripathy和Acharya,2018年)和马尔可夫过渡领域(Wang和Oates,2015)。与图像变换不同,其他特征提取方法不是域不可知的。这些特征首先使用一些领域知识进行手工设计,然后输入深度学习判别分类器。例如在Uemura等人。 (2018),从放置在外科医生手上的传感器数据中提取若干特征(例如速度),以便确定手术训练期间的技能水平。实际上,大多数具有一些手工设计特征的TSC深度学习方法都存在于人类活动识别任务中(Ignatov,2018)。有关使用移动和可穿戴传感器网络进行人体运动检测的深度学习的不同应用的更多细节,我们将感兴趣的读者引用到最近的深度学习方法(有或没有手工设计功能)的调查(Nweke等,2018)。对人类活动识别任务进行了彻底的描述。

    与特征工程相比,端到端深度学习旨在结合特征学习过程,同时微调判别分类器(Nweke等,2018)。 由于这种类型的深度学习方法是域不可知的,并且不包括任何特定于域的预处理步骤,因此我们决定使用其神经网络架构进一步分离这些端到端方法。

    在Wang等人(2017b);耿和罗(2018年),一个MLP被设计为从头学习一个有区别的时间序列分类器。 MLP方法的问题在于时间信息丢失并且所学习的特征不再是时不变的。通过从原始输入时间序列中学习空间不变的滤波器(或特征),这就是CNN最有用的地方(Wang et al。,2017b)。在我们的研究中,我们发现CNN是TSC问题应用最广泛的架构,这可能是由于它们的稳健性和与复杂架构(如RNN或MLP)相比相对较少的训练时间。已经在UCR / UEA档案的子集上提出并验证了CNN的几种变体(Chen等人,2015b; Bagnallet等,2017),例如残差网络(ResNets)(Wang等人,2017b; Geng和Luo) ,2018)为卷积层添加线性快捷连接可能会提高模型的准确性(He et al。,2016)。在Le Guennec等人。 (2016);崔等人。 (2016);王等人。 (2017b);赵等人。 (2017年),传统的CNN也在UCR / UEA档案中得到验证。最近在Wang等人(2018),Wang等人(2017b)提出的架构被修改为利用基于Daubechies 4 Wavelet值的滤波器初始化技术(Rowe和Abbott,1995)。在UCR / UEA档案之外,深度学习已经在不同领域的若干数据集上达到了最先进的表现(L?ngkvist等,2014)。对于时空系列预报问题,如气象学和海洋学,Ziat等人提出了DNNs(2017年)。 Strodthoff和Strodthoff(2018)提出使用深CNN检测来自心电图数据的心肌梗塞。对于可穿戴传感器的人类活动识别,深度学习正在取代特征工程方法(Nweke等,2018),其中特征不再是手工设计,而是通过反向传播训练的深度学习模型学习。另一种类型的时间序列数据存在于电子健康记录中,其中最近具有CNN的生成性对抗网络(Che等人,2017a)被训练用于基于患者历史医疗记录的风险预测。在Ismail Fawaz等人(2018b),CNN旨在达到最先进的手术技能识别性能。刘等人(2018)利用CNN模型的多变量和滞后特征特征,以实现预测和健康管理(PHM)2015挑战数据的最新准确性。最后,最近对生理信号分类的深度学习的回顾揭示了CNN是用于所考虑任务的最流行的架构(Faust等,2018)。我们提到了一种最终类型的混合体系结构,它们在UCR / UEA归档数据集上显示了TSC任务的有希望的结果,其中主要是CNN与其他类型的体系结构相结合,例如门控循环单元(Lin and Runger,2018)和注意机制(Serrà等,2018)。读者可能已经注意到CNN出现在自动编码器下以及图5中的端到端学习下。这可以通过以下事实来解释:当训练为自动编码器的CNN具有与以端到端的方式训练的CNN有完全不同的目标函数。
    现在我们已经提出了为TSC分组DNN的分类法,我们在下面的部分中介绍了我们在实验评估中包含的不同方法。 我们还解释了选择这些算法背后的动机。
    在这里插入图片描述

    3方法

    在本节中,我们首先解释为这种实证评估选择有区别的端到端方法的原因。 然后,我们详细描述了九种不同的深度学习架构及其相应的优点和缺点。

    3.1为什么判别的端到端方法?

    如前面第2节所述,生成模型的主要特征是拟合时间序列自我预测器,其潜在表示后来被输入现成的分类器,如随机森林或SVM。 虽然这些模型有时会捕捉时间序列的趋势,但我们决定将这些生成方法排除在实验评估之外,原因如下:

    • 这种方法主要用于分类器以外的任务,作为更大分类方案的一部分(Bagnall等,2017);
    • 文献中的非正式共识是生成模型通常不如直接判别模型准确(Bagnall等,2017; Nguyen等,2017);
    • 这些模型的实现通常比判别模型更复杂,因为它引入了一个拟合时间序列生成器的额外步骤 - 这被认为是大多数方法的障碍,其代码不公开,例如Gong等。(2018); Che et al。(2017b); Chouikhi等。(2018); 王等人。(2017A);
    • 这些模型的准确性在很大程度上取决于所选择的现成分类器,有时甚至不是神经网络分类器(Rajan和Thiagarajan,2018)。

    鉴于上述生成模型的局限性,我们决定将我们的实验评估限制为TSC的判别性深度学习模型。除了将研究限制在判别模型之外,我们还决定只考虑端到端方法,从而进一步将包含特征工程的分类器排除在我们的经验评估之外。我们之所以做出这样的选择,是因为我们认为深度学习方法的主要目标是消除由于手动设计的特性引起的偏差(Ordó¨nez和Roggen,201614),从而使网络能够学习分类任务中最具判别力的有用特征。这也是人类活动识别文献中的共识,其中深度学习方法的准确性在很大程度上取决于提取特征的质量(Nweke等,201815)。最后,由于我们的目标是为任何TSC任务提供领域黑箱的深度学习方法的实证研究,我们发现最好将不包含任何领域知识的模型与其方法进行比较。

    至于为什么我们选择九种方法(在下一节中描述),首先是因为在TSC的所有有区别的端到端深度学习模型中,我们想要涵盖各种架构,例如CNN,全连接CNN ,MLP,ResNets,ESN等。其次,由于我们无法涵盖所有TSC域中验证的所有方法的实证研究,我们决定只包括在单变量时间序列UCR/UEA档案的整体(或子集)上验证的方法/或MTS档案(Baydogan,2015)。最后,我们选择使用不尝试解决TSC问题的子任务的方法,例如在Geng和Luo(2018)中,其中CNN被修改以对不平衡的时间序列数据集进行分类。为了证明这一选择,我们强调不平衡的TSC问题可以通过数据增强(Ismail Fawaz等,2018a)和修改类权重(Geng和Luo,201816)等几种技术来解决。但是,任何深度学习算法都可以从这种类型的修改中受益。因此,如果我们确实包括用于解决不平衡TSC任务的修改,那么确定它是否是深度学习分类器的选择或改进本身以提高模型的准确性将更加困难。最近研究中心的另一个子任务是早期时间序列分类(Wang等,2016a),其中深度CNN被修改为包括时间序列的早期分类。最近,还为早期TSC任务提出了深度强化学习方法(Martinez等,2018)。有关详细信息,我们将感兴趣的读者引用到最近的早期时间序列分类深度学习调查(Santos和Kern,2017)。

    3.2方法比较

    在概述了最近的时间序列分类深度学习方法之后,我们提出了我们在本文中选择比较的九种架构。
    (多层感知器MLP、完全卷积神经网络FCN、残差网络ResNet、编码器Encoder、多尺度卷积神经网络MCNN、t-LeNet、多通道深度卷积神经网络MCDCNN、时间卷积神经网络Time-CNN、时不变回波状态网络TWIESN)
    这里展开说博主比较感兴趣的几个卷积神经网络。

    完全卷积神经网络

    完全卷积神经网络(FCNs)首先在Wang等人提出。 (2017b)用于对单变量时间序列进行分类,并在来自UCR / UEA档案的44个数据集上进行验证。 FCN主要是卷积网络,不包含任何本地池化层,这意味着在整个卷积中时间序列的长度保持不变。 此外,该架构的主要特征之一是用全局平均池化(GAP)层替换传统的最终FC层,这大大减少了神经网络中的参数数量,同时允许使用CAM(Zhou et al。,2016)突出显示输入时间序列的哪些部分对某个分类贡献最大。

    Wang等人提出的架构(2017b)首先由三个卷积块组成,其中每个块包含三个操作:卷积后跟批量归一化(Ioffe和Szegedy,2015),其结果被馈送到ReLU激活函数。 第三卷积块的结果在对应于GAP层的整个时间维度上被平均。 最后,传统的softmax分类器完全连接到GAP层的输出。所有卷积都有一个等于1的步幅,零填充以保持卷积后时间序列的精确长度。 第一个卷积包含128个滤波器,滤波器长度等于8,接着是256个滤波器的第二个卷积,滤波器长度等于5,后者又被馈送到由128个滤波器组成的第三个也是最后一个卷积层,每个滤波器由一个滤波器长度等于3。

    我们可以看到FCN没有任何池化或正则化的操作。 此外,FCN的一个优点是不同长度的时间序列中4层(5个)的参数数量的不变性(表1中的#invar表示)。 这种不变性(由于使用GAP)使得能够使用迁移学习方法,其中可以在某个源数据集上训练模型,然后在目标数据集上对其进行微调(Ismail Fawaz等,2018c)

    残差网络

    Wang等人的第三个也是最后一个提出的架构(2017b)是一个相对较深的剩余网络(ResNet)。 对于TSC,这是最深的架构,有11层,前9层是卷积,后面是来平均时间维度上的时间序列的GAP层。 ResNets的主要特征是连续卷积层之间的shortcut connection。 实际上,与通常的卷积(例如在FCN中)的不同之处在于添加了shortcut以将残余块的输出链接到其输入,从而使梯度直接通过这些连接流动,这使得训练成为DNN 通过减少消失梯度效应更容易(He et al.,2016)。

    该网络由三个残差块组成,后跟一个GAP层和一个最终的softmax分类器,其神经元数量等于数据集中的类数。 每个残余块首先由三个卷积组成,其输出被添加到残余块的输入,然后馈送到下一层。 所有卷积的过滤器数量固定为64,ReLU激活功能之前是批量标准化操作。 在每个残余块中,对于第一,第二和第三卷积,滤波器的长度分别设置为8,5和3。在这里插入图片描述

    与FCN模型类似,ResNet架构中的层(除最后一层)在不同的数据集中具有不变数量的参数。也就是说,我们可以轻松地在源数据集上预先训练模型,然后迁移到目标数据集上微调它,而不必修改网络的隐藏层。 正如我们之前提到的,由于这种类型的转移学习方法可以为某些类型的架构提供优势,我们将对这一研究领域的探索留待未来的工作。 Wang等人提出的ResNet架构。 (2017b)如图6所示。

    编码器

    最初由 Serrà等人提出(2018),编码器是一种混合深度CNN,其架构受FCN(Wang等人,2017b)的启发,主要区别在于GAP层被attention层取代。 在Serrà等人(2018)中,提出了两种编码器变体:第一种方法是在目标数据集上以端到端的方式从头开始训练模型,而第二种是在源数据集上预先训练相同的架构,然后在目标数据集上微调它。 后一种方法达到了更高的准确度,从而受益于迁移学习技术。 另一方面,由于几乎所有方法都可以在一定程度上受益于迁移学习方法,我们决定只实施已经在作者原始论文中表现出高性能的端到端方法(从头开始训练)。

    与FCN类似,前三层是具有一些相对较小的修改卷积层。第一个卷积由128个长度为5的滤波器组成;第二卷积由256个长度为11的滤波器组成;第三个卷积由512个长度为21的滤波器组成。每个卷积之后是一个实例归一化操作(Ulyanov等,2016),其输出被馈送到参数整流线性单元(PReLU)(He et al.,2015)激活功能。 PReLU的输出之后是dropout操作(速率等于0.2)和长度为2的最大池化。第三个卷积层被馈送到attention机制(Bahdanau等,2015),使网络能够了解时间序列的哪些部分(在时域中)对某个分类很重要。更确切地说,为了实现这种技术,输入MTS乘以具有相同长度和通道数的第二MTS,除了后者已经通过softmax功能。第二个MTS中的每个元素将充当第一个MTS的权重,从而使网络能够了解每个元素的重要性(时间戳)。最后,传统的softmax分类器完全连接到后一层,其中神经元个数等于数据集中的类别数。

    除了用attention层替换GAP层之外,编码器在三个主要核心变化中与FCN不同:
    (1)PReLU激活函数,其中为每个滤波器添加附加参数以使得能够学习函数的梯度
    (2) dropout 与正则化技术
    (3)最大池化操作
    最后要注意的是,仔细设计Encoder的attention机制可以实现所有层的不变性,从而鼓励作者实施迁移学习方法。

    多尺度卷积神经网络

    最初由Cui等人提出(201617),多尺度卷积神经网络(MCNN)是在UCR Archive上验证端到端深度学习架构的最早方法。 MCNN的架构非常类似于传统的CNN模型:两个卷积(和最大池),然后是FC层和最终的softmax层。另一方面,这种方法在其繁重的数据预处理步骤中非常复杂。崔等人(2016)是第一个引入Window Slicing(WS)方法作为数据增强技术的人。 WS在输入时间序列上滑动窗口并提取子序列,从而在提取的子序列而不是原始输入时间序列上训练网络。在使用WS方法从输入时间序列中提取子序列之后,使用变换阶段。更确切地说,在任何训练之前,子序列将经历三个转换:(1)恒等映射(Identity Mapping); (2)下采样和(3)平滑;因此,将单变量输入时间序列转换为多变量输入时间序列。这种繁重的预处理会让它不是端到端的方法受到质疑,但由于它们的方法足够通用,我们将其合并到我们开发的框架中。

    对于第一次变换,输入子序列保持不变,原始子序列将用作独立第一卷积的输入。下采样技术(第二次变换)将导致具有不同长度的较短子序列,然后将经历另一个独立的 与第一卷积平行的卷积。 对于平滑技术(第三变换),结果是平滑的子序列,其长度等于输入原始子序列,其也将被馈送到与第一和第二卷积并行独立卷积。

    第一卷积阶段中的每个卷积的输出被连接以形成后续卷积层的输入。 在该第二层之后,使用S形激活功能部署具有256个神经元的FC层。 最后,通常的softmax分类器与许多神经元一起使用,这些神经元等于数据集中的类数

    请注意,此网络中的每个卷积使用256个过滤器,其中sigmoid作为激活函数,然后是最大池操作。 两个体系结构超参数交叉验证,使用网格搜索对训练集中看不见的分割:过滤器长度和池化因子,它确定最大池操作的池大小。 该网络中的总层数为4,其中只有前两个卷积层是不变的(可迁移的)。 最后,由于WS方法也在测试时使用,因此输入时间序列的类别通过对提取的子序列的预测标签的多数投票来确定。

    Time Le-Net

    Time Le-Net(t-LeNet)最初由Le Guennec等人提出(2016)并且受到LeNet架构文件识别任务的巨大表现的启发(LeCun等,1998a)。 该模型可以被认为是具有两个卷积的传统CNN,其后是FC层和最终的softmax分类器。 与FCN有两个主要区别:(1)FC层和(2)本地最大池操作。 与GAP不同,局部池化通过获取本地池窗口中的最大值来引入激活图中的小扰动(卷积的结果)的不变性。 因此,对于池大小等于2,池化操作将通过获取每两个时间步之间的最大值将时间序列的长度减半。

    对于两个卷积,使用ReLU激活函数,滤波器长度等于5.对于第一个卷积,使用5个滤波器,然后是长度等于2的最大池。第二个卷积使用20个滤波器,然后是长度为4的最大池。 因此,对于长度为l的输入时间序列,这两个卷积的结果输出将时间序列的长度除以8=428 = 4* 2。卷积块之后是非线性完全连接层。 由500个神经元组成,每个神经元使用ReLU激活功能。 最后,与所有先前的体系结构类似,最终softmax分类器中的神经元数量等于数据集中的类数量。

    与ResNet和FCN不同,由于使用FC层而不是GAP层,这种方法没有太多不变层(4个中的2个),因此需要大量增加需要训练的参数数量,这也取决于输入时间序列的长度。 因此,该网络的可转移性限于前两个卷积,其参数数量仅取决于所选滤波器的数量和长度。

    我们应该注意到,t-LeNet是采用数据增强技术来防止过度拟合的方法之一,尤其是对于UCR / UEA档案中相对较小的时间序列数据集。他们的方法使用两种数据增强技术:WS和Window Warping(WW)。前一种方法与最初在Cui等人提出的MCNN数据增强技术相同。 (2016)。至于第二种数据增强技术,WW采用了一种挤压或扩张时间序列的变形技术。为了处理多长度时间序列,采用WS方法确保提取相同长度的子序列用于训练网络。因此,首先对长度为l的给定输入时间序列进行扩张(x2)然后进行挤压(×12\times\frac{1}{2}),得到三个时间序列长度为l,2l12ll,2l和\frac{1}{2}l,将其馈送到WS以提取相等长度的子序列用于训练。在他们的原始论文中没有这样(Le Guennec等,2016),WS的长度设置为0.9l0.9l。最后类似于MCNN,由于WS方法也在测试时使用,因此应用对提取的子序列预测标签的多数投票。

    多通道深度卷积神经网络

    多通道深度卷积神经网络(MCDCNN)最初是在两个多变量时间序列数据集上提出并验证的(Zheng et al。,2014,2016)。所提出的架构主要是传统的深度CNN,其具有对MTS数据的一个修改:卷积在输入MTS的每个维度(或信道)上独立地(并行地)应用。输入MTS的每个维度将经历两个卷积阶段。 8个长度为5的过滤器,带有ReLU作为激活功能。每个卷积之后是长度为2的最大池化操作。所有维度的第二卷积级的输出在通道轴上连接,然后馈送到具有732个神经元的FC层,其中ReLU作为激活函数。最后,softmax分类器与许多神经元一起使用,这些神经元等于数据集中的类数。通过在softmax分类器之前使用FC层,该网络的可转移性限于第一和第二卷积层。

    时间卷积神经网络

    时间CNN方法最初是由Zhao等人提出的。 (2017年)对于单变量和多变量TSC。与先前描述的网络相比有三个主要差异。 Time-CNN的第一个特征是使用均方误差(MSE)而不是传统的分类交叉熵损失函数,它已被我们到目前为止提到的所有深度学习方法所使用。因此,最终层不是softmax分类器,而是传统的FC层,其中sigmoid作为激活函数,不保证概率之和等于1.与传统CNN的另一个区别是使用局部平均池操作代替本地最大池。此外,与MCDCNN不同,对于MTS数据,它们对多变量分类任务的所有维度应用一个卷积。该架构的另一个独特特征是最终分类器直接完全连接到第二个卷积的输出,这完全消除了GAP层没有用FC非线性层替换它。

    该网络由两个连续的卷积层组成,分别具有6和12个滤波器,然后是长度为3的局部平均汇集操作。卷积采用sigmoid作为激活函数。 网络的输出由FC层组成,其中多个神经元等于数据集中的类数。

    在这里插入图片描述

    3.3超参数

    表1和表2分别显示了除TWIESN之外的所有描述方法的体系结构和优化超参数,因为其超参数与其他八种算法的超参数不兼容。我们应该为所有其他深度学习分类器添加(省略TWIESN)在训练集或验证集(从训练集中拆分)上执行模型检查点过程。这意味着如果模型训练了1000代,则将选择验证集(或训练集)损失方面表现最佳的模型用于评估。该特性包含在表2中的“valid”栏下。除了模型检查点程序之外,我们还应注意表1中的所有深度学习模型都是使用Glorot的统一初始化方法随机初始化的(Glorot和Bengio,201018)。所有模型都使用随机梯度光度(SGD)的变体进行优化,例如Adam和AdaDelta。我们应该补充一点,对于王等人提出的FCN,ResNet和MLP(2017b)19,学习率每次减少0.5倍模型的训练损失在50个连续时期内没有改善(最小值等于0.0001)。最后要注意的是,我们无法控制这些描述的体系结构可能已经过拟合UCR / UEA存档并且凭经验设计以实现高性能这一事实,这在比较基准测试分类器时总是存在风险( Bagnall等,2017)。因此,我们认为挑战组织者只有公开提供训练数据和测试数据进行评估的挑战可能有助于缓解这一问题。

    4实验装置

    我们首先介绍我们在此实证研究中采用的数据集属性。然后,我们详细描述了我们开发的用于时间序列分类的深度学习的开源框架。

    4.1数据集

    单变量存档

    为了对所有方法进行彻底和公平的实验评估,我们在整个UCR / UEA档案中测试了每种算法(Chen等,2015b; Bagnall等,2017),其中包含85个单变量时间序列数据集。数据集具有不同的变化特征,例如,对于ItalyPowerDemand数据集,最小值为24的系列的长度以及HandOutLines数据集的最大值等于2,709。可能影响DNN准确性的一个重要特征是训练集的大小,对于DiatomSizeReduction和ElectricDevices数据集分别在16和8926之间变化。我们应该注意到,20个数据集包含一个相对较小的训练集(50个或更少的实例),这在使用非常深的体系结构(如ResNet)时不会成为获得高精度的障碍。此外,类的数量在2(对于31个数据集)和60(对于ShapesAll数据集)之间变化。请注意,此存档中的时间序列已经过z规范化。

    除了公开可用之外,UCR / UEA档案验证的选择是通过将来自不同领域的数据集分解为七个不同类别(图像轮廓,传感器读数,运动捕获,光谱仪,ECG, 电气设备和模拟数据)在Bagnall等人。 我们在简洁性上不再重复Bagnall等人在的UCR / UEA档案中描述过的数据统计。

    多变量存档

    我们还评估了包含13个MTS分类数据集的Baydogan归档(Baydogan,2015)的所有深度学习模型。 对于单个GPU上的内存使用限制,我们将MTS数据集性能测量系统(PeMS)排除在我们的实验之外。 该档案还展示了具有不同特征的数据集,例如时间序列的长度,与UCR / UEA档案不同,它在同一数据集中变化。 这是因为UCR / UEA档案中的数据集已经被重新调整为在一个数据集中具有相等的长度。(具体信息如下)
    在这里插入图片描述

    4.2实验

    对于两个档案中的每个数据集(总共97个数据集),我们已经训练了九个深度学习模型(在前一节中介绍),每个模型有10个不同的运行。每次运行在归档中使用相同的原始训练/测试分割,但具有不同的随机权重初始化,这使我们能够在10次运行中取平均精度,以减少由于权重的初始值引起的偏差。总的来说,我们为85个单变量和12个多变量TSC数据集进行了8730次实验。因此,鉴于需要培训的大量模型,我们在60个GPU的集群上进行了实验。这些GPU混合了四种类型的Nvidia显卡:GTX 1080 Ti,Tesla K20,K40和K80。总顺序即如果计算已在单个GPU上完成运行时间约为100天。但是,通过利用60个GPU的集群,我们设法在不到一个月的时间内获得了结果。我们使用开源深度实现了我们的框架。

    继Lucas等人之后。我们使用了测试集上10次运行的平均精度测量。 与Bagnall等人发表的最新结果相比较, 我们使用中位数测试误差平均准确度。 根据Demšar (2006)的建议,我们使用Friedman检验(Friedman,1940)来拒绝零假设。 然后我们进行了Benavoli等人推荐的成对事后分析,其中平均等级比较被Wilcoxon签名等级测试(Wilcoxon,1945)替换为Holm的alpha(5%)校正。 为了可视化这种类型的比较,我们使用了 Demšar (2006)提出的临界差异图,其中粗水平线显示了一组在准确性方面没有显着差异的分类器。

    5结论

    在本节中,我们给出了九种方法中每种方法的准确度。所有准确度都是绝对的,而不是相对的,如果我们声称算法A比算法B好5%,这意味着A的平均准确度比B高0.05

    5.1单变量时间序列的结果

    我们在配套的GitHub存储库中提供了我们在85个单变量时间序列数据集上测试的9个深度学习模型的10次运行的原始精度:UCR / UEA档案(Chen等,2015b; Bagnall等,2017))。 相应的关键差异图如图所示。ResNet明显优于其他方法,平均排名接近2。ResNet赢得了85个问题中的50个问题,并且明显优于FCN架构。 这与原始论文的结果相反,其中发现FCN在44个数据集中的18个中优于ResNet,这表明在更大的档案上进行验证的重要性,以便具有强大的统计意义。
    关键差异图显示九个深度学习分类器在单变量UCR / UEA时间序列分类档案中的成对统计差异比较
    我们相信ResNet的成功很大程度上归功于其灵活的架构。 首先,我们的研究结果与计算机视觉文献的深度学习是一致的,其中更深层次的神经网络比浅层架构更成功(He et al。,2016)。 事实上,在4年的时间里,神经网络从AlexNet 2012中的7层(Krizhevsky等,2012)变为2016年ResNet的1000层(He等,2016)。 这些类型的深层体系结构通常需要大量数据才能很好地概括出看不见的例子(He et al。,2016)。 尽管与数十亿标记图像(如ImageNet(Russakovsky等,2015)和OpenImages(Krasin等,2017)挑战)相比,我们实验中使用的数据集相对较小,但最深的网络确实达到了竞争对手的准确性在 UCR / UEA档案基准上。

    我们给出了深度CNN在TSC任务上的这种高泛化能力的两个潜在原因。 首先,看到分类任务中卷积成功需要学习在二维空间(例如图像中的宽度和高度)空间上不变的特征,很自然地认为在一维空间(时间)中进行模式识别对CNN来说应该是一项更容易的任务,因此需要更少的数据来学习。 深度CNN对时间序列数据的高精度背后的另一个更直接的原因是它在其他顺序数据中的成功,例如语音识别(Hinton等人,2012)和句子分类(Kim,2014),其中文本和音频表现出类似于时间序列数据的自然时间顺序。

    MCNN和t-LeNet架构产生了非常低的精度,只有一次地震数据集获胜。 这两种方法之间的主要共同点是提取子序列以增加训练数据。因此,模型学习从较短的子序列而不是整个序列中分类时间序列,然后使用多数表决方案,在测试时间的时间序列是分配了一个类标签。 这两种方法的不良表现(最差平均等级)表明,这种切片时间序列的特殊方法并不能保证时间序列的判别信息没有丢失。 这两个分类器类似于相位相关间隔TSC算法(Bagnall等,2017),其中分类器从每个系列的间隔导出特征。 与最近的TSC算法的比较研究类似,这种基于窗口切片的方法产生了最低的平均等级

    尽管MCDCNN和Time-CNN最初被提议用于对MTS数据集进行分类,但我们已经在单变量UCR / UEA存档上对它们进行了评估。除了ECG5000数据集之外,MCDCNN没有设法击败任何分类器,而在ECG5000数据集上几乎全部分类器都达到了很高的准确度。 这种低性能可能是由于非线性FC层取代了性能最佳算法(FCN和ResNet)的GAP池。 该FC层减少了学习时间不变特征的影响,这解释了为什么MLP,Time-CNN和MCDCNN表现出非常相似的性能。

    一种显示相对高精度的方法是Encoder(Serrà等,2018)。 统计测试表明Encoder,FCN和ResNet之间存在显着差异。 FCN在36个数据集中获胜,其中Encoder仅在17个获胜,这表明与Encoder的attention机制相比,GAP层具有优势。

    5.2与最先进的方法进行比较

    在本节中,我们将ResNet(我们研究中最准确的DNN)与目前最先进的分类器进行了比较,这些分类器是在大时间序列分类烘焙中评估的UCR / UEA档案(Bagnall等,2017)。 请注意,我们的实证研究强烈建议使用ResNet而不是任何其他深度学习算法 - 它是与FCN(第二个最准确的DNN)具有相似运行时间的最准确算法。 最后,由于ResNet的结果是在十个不同的随机初始化中取平均值,我们选择采用一次ResNet迭代(中位数)并将其与其他最先进的算法进行比较,这些算法在原始 UCR / UEA档案训练/测试分组上执行。

    在Bagnall等人评估的18个分类器中(2017),我们选择了四种表现最佳的算法(前四个):
    (1)Lines和Bagnall(2015)提出的弹性系综(EE)是最近邻分类器的集合,具有11种不同的时间序列相似性度量;
    (2)在Schäfer(2015)中发表的SFA-Bag-Bagols(BOSS)通过使用离散傅里叶变换对时间序列进行离散化,然后使用定制的距离度量建立最近邻分类器,形成了一个有区别的词汇包;
    (3)由Hills等人(2014)开发的Shapelet变换(ST)提取判别子序列(shapelets)并建立一个新的时间序列表示,该表示被馈送到8个分类器的集合;
    (4)Bagnall等人(2017)提出的基于转换的集合(COTE)的集合基本上是包括EE和ST的35种TSC算法的加权集合。
    (5)我们还包括Lines等人(2018)提出的基于转换的集合的分层投票集合(HIVE-COTE)通过利用分层投票系统以及添加两个新的分类器和两个额外的转换域来显着提高COTE的性能。
    (6)除了这五个最先进的分类器,我们还包括经典的最近邻居和DTW以及通过训练集上的交叉验证设置的变形窗口(WW),由NN-DTW-WW表示,因为它仍然是最流行的时间序列数据分类方法之一(Bagnall等,2017)。
    (7)最后,我们添加了一个名为邻近森林(PF)的近期方法,它类似于随机森林,但是用EE的弹性距离中选择的随机相似性度量替换了基于属性的分裂标准(Lucas et al。,2018)。
    注意我们做了没有实现任何非深度TSC算法。我们使用了Bagnall等人提供的结果。 (2017)和其他相应的论文构建了下图中的关键差异图。

    临界差异图显示了单变量UCR / UEA时间序列分类档案中最先进分类器的成对统计差异比较。
    图8显示了UEA基准测试的关键差异图,其中ResNet添加到六个分类器池中。正如我们之前所做的那样,将最先进的分类器与ResNet在测试集上的中位数精度进行比较。然而,我们为ResNet的每次迭代生成了十个不同的平均等级,并观察到比较分类器的排名对于ResNet的十个不同的随机初始化是稳定的。统计测试未能发现COTE / HIVE-COTE和ResNet之间存在任何显着差异,ResNet是唯一能够达到与COTE相似性能的TSC算法。请注意,对于ResNet的十个不同的随机初始化,成对统计测试总是在ResNet和COTE / HIVE-COTE之间找不到任何重要性。根据Wilcoxon符号秩检验,PF,ST,BOSS和ResNet表现出相似的表现,但ResNet与COTE没有显着差异的事实表明,更多数据集可以更好地洞察这些表现(Demšar,2006)。 NN-DTW-WW和EE显示出最低的平均排名,表明这些方法不再与目前最先进的TSC算法竞争。值得注意的是,由Holm’s alpha校正的Wilcoxon符号秩检验形成的团队不必反映等级顺序(Lines等,2018)。例如,如果我们有三个具有平均等级(C1> C2> C3)的分类器(C1,C2,C3),则仍然可能遇到C1不明显比C2和C3差的情况,而C2和C3则有显著差异的情况。在我们的实验中,当与最先进的算法进行比较时,我们遇到了这个问题(ResNet> COTE> HIVE-COTE)。因此,我们应该强调,HIVECOTE和COTE在进行成对统计检验时有显着差异

    虽然HIVE-COTE仍然是最准确的分类器(当在UCR / UEA档案上进行评估时),但它在真实数据挖掘应用中的使用受到限制,因为其大量的训练时间复杂度,即O(N2·T4)对应于训练时间其中一个单独的分类器ST。但是,我们应该注意到Bostrom和Bagnall(2015)最近的工作表明,可以使用随机抽样方法显着减少ST(HIVE-COTE的阻塞点)的运行时间而不会损失任何准确性。另一方面,当应用于图像时,DNN提供了这种类型的可扩展性,证明了它在计算机视觉领域的革命,图像比时间序列数据大一千倍(Russakovsky等,2015)。除了巨大的训练时间之外,由于采用最近邻分类器,HIVE-COTE的分类时间受到训练集的线性扫描的限制,而DNN的普通GPU并行化提供了即时分类。最后我们应该注意到,与HIVE-COTE不同,ResNet的超参数没有针对每个数据集进行调整,而是整个基准测试使用了相同的架构,这表明对这些超参数的进一步研究应该可以提高DNN对T​​SC的准确性。这些结果应该为TSC深入学习提供洞察力,因此鼓励研究人员将DNN视为时间序列数据的强大实时分类器。

    公平比较的必要性

    在本节中,我们强调与其他机器学习TSC算法的比较的公平性。由于我们没有训练或测试任何最先进的非深度学习算法,因此我们可以为所描述的DNN提供更多的训练时间。例如,对于诸如NN-DTW的懒惰机器学习算法,当允许最大翘曲时训练时间为零,而已经表明,司法设置翘曲窗口Dau等人(2017)可以导致准确性的显着增加。因此,我们认为允许更彻底地搜索DTW的变形窗口将导致深度学习方法与其他最先进的TSC算法之间更公平的比较。除了交叉验证NN-DTW的超参数之外,我们可以设想在数据预处理和清理上花费更多时间(例如平滑输入时间序列)以提高NN-DTW的准确性(Höppner,2016; Dau等人) 。最后,为了在深度学习和当前最先进的TSC算法之间获得公平的比较,我们认为优化网络权重所花费的时间也应该用于优化基于非深度学习的分类器,尤其是惰性学习算法,例如K最近邻。

    5.3多变量时间序列的结果

    我们在我们的配套资料库2上提供了9个深度学习分类器的详细性能,用于10个不同的随机初始化,超过12个MTS分类数据集(Baydogan,2015)。尽管Time-CNN和MCDCNN是最初为MTS数据提出的唯一架构,但它们的表现优于三个深度CNN(ResNet,FCN和Encoder),这表明这些方法在MTS分类任务中具有优势。图9中描绘了相应的临界差异图,其中统计测试未能发现九个分类器之间的任何显着差异,这主要是由于与其单变量对应物相比较少数量的数据集。因此,我们在图10中说明了两个档案合并时的关键差异图(总共对97个数据集进行评估)。乍一看,我们可以注意到,在将MTS数据集添加到评估时,图10中的关键差异图与图7中的关键差异图没有显着差异(其中仅考虑了单变量UCR / UEA存档)。这可能是因为与85个单变量数据集的性能相比,算法在12个MTS数据集上的性能在一定程度上可以忽略不计。这些观察结果强化了为了评估混合单变量/多变量时间序列分类器而需要具有同样大的MTS分类档案的需要。其余分析专门用于研究数据集特征对算法性能的影响。

    5.4数据集的特征可以告诉我们哪些最佳架构?

    我们研究的第一个数据集特征是问题的域。 下表(深度学习算法的性能按主题分组。 每个条目都是算法最准确的数据集主题的百分比)显示了算法在数据集主题方面的表现。这些主题首先在Bagnall等人(2017年)中定义。 同样,我们可以清楚地看到ResNet作为跨不同领域的最佳表现方法的主导地位。 一个例外是心电图(ECG)数据集(共7个),其中ResNet在71.4%的ECG数据集中被FCN模型彻底击败。 然而,鉴于样本量很小(只有7个数据集),我们无法得出结论,FCN几乎总能胜过ECG数据集的ResNet模型(Bagnall等,2017)
    深度学习算法的性能按主题分组。 每个条目都是算法最准确的数据集主题的百分比。
    我们研究的第二个特征是时间序列长度。类似于Bagnall等人(2017)的非深度学习模型的发现 ,时间序列长度不提供深度学习方法的表现信息。下表显示了按数据集长度分组的单变量数据集上每个DNN的平均排名。人们可能会认为相对较短的过滤器(3)可能会影响ResNet和FCN的性能,因为短过滤器无法捕获较长的模式。然而,由于增加卷积层的数量将增加CNN模型所看到的路径长度(Vaswani等人,201720),ResNet和FCN设法优于其他滤波器长度更长的方法(21),例如编码器。对于循环TWIESN算法,我们期望很长时间序列的精度很差,因为循环模型可能“忘记”长时间序列的早期元素中存在的有用信息。然而,TWIESN确实在几个长时间序列数据集上达到了竞争准确度,例如在时间序列长度等于448的肉类上达到96.8%的准确度。这表明ESN可以解决消失的梯度问题,尤其是在从长时间序列学习时。
    在这里插入图片描述
    第三个重要特征是数据集的训练大小以及它如何影响DNN的性能。下表显示了按训练组大小分组的每个分类器的平均等级。同样,ResNet和FCN仍然占主导地位并没有多大区别。然而,我们发现了一个非常有趣的数据集:DiatomSizeReduction。 ResNet和FCN在此数据集上实现了最差的准确度(30%),而Time-CNN达到了最佳准确度(95%)。有趣的是,DiatomSizeReduction是UCR / UEA归档中最小的数据集(有16个训练实例),这表明ResNet和FCN很容易过度拟合这个数据集。 Time-CNN是最小的模型也支持这一建议:它包含了极少数的参数设计,只有18个滤波器与FCN的512个滤波器相比。这种简单的Time-CNN架构更难以过度拟合数据集。因此,我们得出结论,Time-CNN中的少量滤波器是其在小型数据集上取得成功的主要原因,但是这种浅层架构无法捕捉到的变化。更大的时间序列数据集,由FCN和ResNet架构高效建模。与深度学习文献一致的最后一个观察结果是,为了在训练DNN时获得高精度,需要一个大型训练集。下图显示了训练大小对ResNet在TwoPatterns数据集上的准确性的影响:在添加更多训练实例时,准确度显着提高,直到75%的训练数据达到100%。
    在这里插入图片描述
    在这里插入图片描述
    最后,我们应该注意到数据集中的类数量 - 尽管可以得出Bagnall等人(2017)最近进行的TSC实验研究结果的一些变化。 - 在根据这个特征比较分类器时没有显示出任何意义。 事实上,大多数DNN的架构,其分类交叉熵作为其损失函数,主要使用相同的分类器:softmax,它基本上是为多类分类而设计的。

    总的来说,我们的结果表明,平均而言,ResNet是的最佳架构,FCN和Encoder分别为第二和第三。 ResNet表现得非常好,除了心电图数据集,其表现都优于FCN。 MCNN和t LeNet,其中时间序列被裁剪成子序列,是平均最差的。 我们发现用FC密集层(MCDCNN,CNN)取代GAP层的方法之间的小差异,这也表现出与TWIESN和MLP类似的性能。

    5.5随机初始化的影响

    深度神经网络的初始化已经受到该领域许多研究人员的极大兴趣(LeCun等,2015)。 这些进步有助于更好地理解和初始化深度学习模型,以最大化梯度下降算法(Glorot和Bengio,2010)发现的非最优解的质量。然而,我们在实验中观察到,DNN为 当用不良(好)随机权重初始化时,TSC的准确度显着降低(增加)。 因此,我们在本节中研究随机初始化如何在最佳和最差情况下影响整个基准测试中ResNet和FCN的性能。
    下图显示了使用三种不同函数(最小值,中值和最大值)在10个随机初始化中聚合时,ResNet与FCN在85个单变量时间序列数据集上的准确度图。当第一次观察下图时,可以很容易地得出结论,无论聚合方法如何,ResNet在大多数数据集中都具有比FCN更好的性能。这与关键差异图以及之前小节中进行的分析一致,其中显示ResNet在具有不同特征的大多数数据集上实现更高的性能。深入研究最小聚合(图12中的红点)显示与ResNet相比,FCN的性能不太稳定。换句话说,权重的初始值可以很容易地降低FCN的准确性,而ResNet在获取最差的初始权重值时保持相对较高的准确度。这也与ResNet的平均标准偏差(1.48)一致,小于FCN(1.70)。这些观察结果将鼓励从业者避免使用复杂的深度学习模型,因为其准确性可能不稳定。然而,我们认为研究不同的权重初始化技术,例如利用预先训练的神经网络的权重,可以产生更好和更稳定的结果(Ismail Fawaz等,2018c21在这里插入图片描述

    6可视化

    在本节中,我们首先研究使用类激活图来提供可解释的反馈,突出显示分类器做出某个决定的原因。 然后,我们提出另一种基于多维尺度的可视化技术(Kruskal和Wish,1978),了解DNN所学习的潜在表征。

    6.1类激活图

    我们研究了类等激活图(CAM)的使用,这是由Zhou等人首次提出的(2016)突出显示对给定类别识别贡献最大的图像部分。王等人(2017b)后来介绍了一种带有TSC应用的一维CAM。该方法通过突出显示对特定分类贡献最大的子序列来解释某个深度学习模型的分类。图13和14分别显示了在GunPoint和Meat数据集上应用CAM的结果。注意,采用CAM仅适用于在softmax分类器之前具有GAP层的方法(Zhou等人,201622)。因此,我们在本节中仅考虑了ResNet和FCN模型,他们也达到了最佳的精度。请注意Wang等人(2017b)是唯一一篇提出使用DNN对TSC进行可解释分析的论文我们应该强调,这是一个非常重要的研究领域,为了提高准确性通常会被忽略:9种方法中只有2种提供了解释深度学习模型决策的方法。在本节中,我们首先从数学的角度介绍CAM方法,然后使用关于Meat和GunPoint数据集的两个有趣的案例研究。

    通过采用全球平均池(GAP)层,ResNet和FCN受益于CAM方法(Zhou et al.,201622),这使得我们可辨别输入时间序列的哪些区域是构成其分类的原因。 形式上,让A(t)A(t)是最后一个卷积层的结果,它是一个带有M个变量的MTS。 Am(t)A_m(t)是变量m[1,M]m \in [1, M]的单变量时间序列,实际上是应用第m个滤波器的结果。 现在让wmcw_m^c为第m个滤波器和c类输出神经元之间的权重。 由于使用了GAP层,因此可以通过以下等式计算类czc(z_c)的神经元的输入:
    zc=mwmctAm(t) z_c = \sum_m w_m^c\sum_t A_m(t)
    第二个总和构成整个时间维度上的平均时间序列,但为简单起见省略了分母。 输入zcz_c也可以通过以下等式编写:
    zc=mtwmcAm(t) z_c = \sum_m \sum_t w_m^c A_m(t)
    最后,将分类解释为标签c的类激活图(CAMc)在以下等式中给出:
    CAMc(t)=mwmcAm(t) CAM_c(t) = \sum_m w_m^c A_m(t)
    CAM实际上是单变量时间序列,其中每个元素(在时间戳t[1T]t∈[1,T])等于t处的M个数据点的加权和,其中权重由神经网络学习。

    GunPoint数据集

    GunPoint数据集作为TSC问题最初由Ratanamahatana和Keogh(2005)引入。 该数据集涉及一个男性和一个女性演员执行两个动作(Gun-Draw和Point),这使其成为二元分类问题。 对于Gun-Draw(下图中的Class-1),演员首先将他们的手放在他们的两侧,然后从髋部安装的枪套中取出一把复制枪,将其指向目标一秒钟,然后最后将枪放入皮套同时把他们的手放回原先位置。 与Gun-Draw类似,对于Point(下图中的Class-2),演员遵循相同的步骤,但不是指着枪,而是指向他们的食指。 对于每个任务,跟踪了X和Y轴上的演员右手的质心并且看起来非常相关,因此数据集仅包含一个单变量时间序列:X轴。
    使用类激活映射突出显示当使用FCN和ResNet分类器时GunPoint中两个类的每个时间序列区域的贡献。 红色对应于高贡献和蓝色对几乎没有贡献正确的类别识别(平滑视觉清晰度和最佳颜色查看)
    我们选择从GunPoint可视化CAM开始,主要有三个原因。 首先,与其他噪声数据集不同,它很容易可视化。 其次,FCN和ResNet模型在该数据集上的准确度几乎达到100%,这将有助于我们验证两个模型是否出于同样的原因达成相同的决策。 最后,它只包含两个类,使我们可以更容易地分析数据。

    上图显示了在使用FCN模型(图13a和13b)和ResNet模型(图13c和13d)进行分类时,应用于训练集中两个类的每个时间序列的CAM结果。乍一看,我们可以清楚地看到两个DNN在进行分类决策时如何忽略时间序列的高原非判别区域。它由时间序列的蓝色平面部分描绘,表明对分类器的决定没有贡献。对于高度辨别区域(红色和黄色区域),两个模型都能够选择对应于具有高导数的点的时间序列的相同部分。实际上,两个分类器发现的第一类中第一个最有特色的部分几乎是相同的:图13a和13c左下方的小红色凹凸。最后,另一个有趣的观察是CNN能够定位给定的判别形状,无论它出现在时间序列中的哪个位置,这都是CNN学习时不变翘曲特征的能力的证据。

    一个有趣的观察是将深度学习模型识别的判别区域与通过其他基于小型的方法提取的最具辨别力的小形体进行比较。这一观察也将得到Cui等人提供的数学证明的支持.(2016),它显示了如何将CNN中的学习过滤器视为通过学习shapelets算法提取的一般形状的小形体(Grabocka等,2014)。 Ye和Keogh(2011)发现,当演员的手臂下降时(图中的水平轴上约为120),Gun / NoGun分类最重要的小形状发生。 Hills等人. (2014)引入了基于小球变换的方法,该方法发现了与Ye和Keogh(2011)所确定的小球相似的小球。对于ResNet和FCN,演员降低他的手臂的部分(图的右下角)似乎也被识别为某些时间序列的潜在判别区域。另一方面,演员抬起手臂的部分似乎也是数据的判别部分,这表明深度学习算法正在识别更多的“塑形”。我们应该注意到,这种观察不能确定哪个分类器提取了最具辨别力的子序列,特别是因为所有算法在GunPoint数据集上都达到了相似的准确度。也许更大的数据集可能会更深入地了解这些机器学习模型的可解释性。最后,我们强调,shapelet变换分类器(Hills et al.,2014)是一种集合方法,它不清楚shapelet如何影响单个分类器的决策,而对于端到端深度学习模型,我们可以直接使用类激活图解释分类。

    肉类数据集

    尽管先前关于GunPoint的案例研究在显示两个模型都在局部化有意义的特征方面产生了有趣的结果,但它未能显示两个最准确的深度学习分类器之间的差异:ResNet和FCN。 因此,我们决定在Meat数据集上进一步分析CAM的两个模型的结果。

    肉类是食品光谱仪数据集,通常用于化学计量学中以对食品类型进行分类,这一任务在食品安全和质量保证方面具有明显的应用。 该数据集中有三个类别:鸡肉,猪肉和土耳其分别对应于下图中的1,2和3类.Al-Jowder等(1997)描述了如何使用具有衰减全反射(ATR)采样的傅立叶变换红外(FTIR)光谱从60个独立样本中获取数据。

    与GunPoint类似,此数据集易于可视化,并且不包含非常嘈杂的时间序列。 此外,只有三个类,可视化可以理解和分析。 最后,与GunPoint数据集不同,两种方法ResNet和FCN在Meat上的结果达到了显着不同的结果,准确度分别为97%和83%。
    在这里插入图片描述

    图中可以比较FCN的CAM(左)和ResNet的CAM(右)。我们首先观察到ResNet在突出地区方面要坚定得多。换句话说,FCN的CAM包含更加平滑的区域,包括青色,绿色和黄色区域,而ResNet的CAM包含更多暗红色和蓝色子序列,表明ResNet可以过滤掉非判别区域和判别区域,其置信度高于FCN,这可能是解释了为什么FCN在此数据集上不如ResNet准确。另一个有趣的观察结果与FCN的CAM为图中c和e右下角的2级和3级突出显示的红色子序列有关。通过视觉调查这部分时间序列,我们清楚地看到它是一个非判别性的部分,因为两个类的时间序列都表现出这种颠簸。因此,该子序列被ResNet模型滤除,其可以通过图d和f右下方的蓝色看到。这些结果表明,ResNet优于FCN的优势主要在于前者能够过滤掉时间序列中的非特征区域。我们将这种能力归因于ResNet的主要特征,它由卷积块之间的残余连接组成,使模型能够通过其快捷链接学习跳过不必要的卷积。

    6.2多维尺度

    我们建议使用多维尺度(MDS)(Kruskal和Wish,1978),目的是获得对属于数据集中不同类别的输入时间序列的空间分布的一些见解。 MDS使用成对距离矩阵作为输入,旨在将每个对象放置在N维空间中,例如尽可能保留对象间距离。 在属于测试集的一组输入时间序列上使用欧几里德距离(ED),然后可以创建相似性矩阵并应用MDS以将该集合显示为二维空间。 这种直截了当的方法假设ED能够强烈地分离原始时间序列,当与ED结合时,最近邻居的准确性通常不是很明显(Bagnall等,2017)。

    另一方面,我们建议应用此MDS方法来使用网络学习的潜在表示来可视化时间序列集。 通常在深度神经网络中,我们有几个隐藏层,人们可以找到数据集的几个潜在表示。 但由于我们的目标是可视化类特定的潜在空间,我们选择使用DNN的最后潜在表示(直接在softmax分类器之前),这已知是类特定层(Yosinski等,2014) 我们决定仅在ResNet和FCN上应用这种方法有两个原因:(1)当在UCR / UEA档案上进行评估时,他们达到了最高等级; (2)它们都在softmax层之前使用GAPGAP层,使得潜在特征的数量与时间序列长度不变。

    为了更好地解释这个过程,对于每个输入时间序列,最后一个卷积(对于ResNet和FCN)输出一个多变量时间序列,其维数等于最后一个卷积中的过滤器数量(128),然后GAPGAP层对后者进行平均 在时间维度上的128维多变量时间序列产生128个实数值的向量,在该向量上计算EDED。 当我们与ED合作时,我们使用公制MDS(Kruskal和Wish,1978)来最小化称为Stress的成本函数,它是一个剩余的平方和:
    StressD(X1,...,XN)=(i,j(dijxixj)2i,jdij2))1/2 Stress_D(X_1,...,X_N)=\left(\frac {\sum_{i,j}(d_{ij}-||x_i-x_j||)^2}{\sum_{i,j}d_{ij}^2})\right)^{1/2}
    其中dijd_{ij}是时间序列XiX_iXjX_jGAPGAP向量之间的EDED。显然,人们必须小心地对MDS输出进行解释,因为数据空间是高度简化的(每个时间序列XiX_i表示为单个数据点xix_i

    下图显示了GunPoint数据集的三个MDS图:(1)原始输入时间序列(图a); (2)来自GAP层的FCN的学习潜在特征(图b); (3)来自ResNet的GAP层的学习潜在特征(图c)。 我们可以很容易地在图a中观察到,当使用原始输入数据并将其投影到2D空间时,这两个类不是线性可分的。 另一方面,在图b和c中,通过在网络学习的潜在表示上应用MDS,可以容易地分离属于这两个类的时间序列集。 我们注意到,两种深度学习模型(FCN和ResNet)都设法将来自GunPoint的数据投影到一个线性可分离的空间,这解释了为什么两个模型在这个数据集上的表现同样非常好,几乎100%准确。

    在这里插入图片描述
    尽管GunPoint上的MDS可视化产生了一些有趣的结果,但它未能确定两个深度学习模型FCN和ResNet之间的差异。因此,我们决定分析另一个数据集,其中两个模型的准确度相差近15%。下图显示了Wine数据集的三个MDS图:(1)原始输入时间序列(图a); (2)来自GAP层的FCN的学习潜在特征(图b); (3)来自ResNet的GAP层的学习潜在特征(图c)。首先看下图,读者可以得出结论,即使使用学习的表示,所有投影都不是线性可分的,这一点可以从FCN和ResNet两个模型的相对较低的精度中看出,它们分别相当于58.7%和74.4% 。彻底的观察表明,ResNet的学习隐藏表示(图c)以比FCN更清晰的方式将数据与两个类别分开(图b)。换句话说,FCN的学习表示具有接近决策边界的太多数据点,而ResNet的隐藏特征使得能够将数据点进一步远离决策边界。这一观察结果可以解释为什么ResNet在Wine数据集上实现了比FCN更好的性能。
    在这里插入图片描述

    7结论

    在本文中,我们提出了最大的TSN DNN实证研究。我们描述了TSC在许多不同领域的最新成功的深度学习方法,如人类活动识别和睡眠阶段识别。 在统一分类法下,我们解释了DNN如何分为生成和判别模型两大类。 我们在一个独特的框架中重新实现了九个最近发布的端到端深度学习分类器,我们向社区公开。 我们的结果表明,端到端深度学习可以通过完全卷积神经网络和深度残差网络等体系结构实现TSC当前最先进的性能。 最后,我们展示了深度模型的黑盒效应如何使它们无法解释,可以通过类激活图可视化来缓解,该可视化突出显示输入时间序列的哪些部分,对特定的类识别贡献最大。

    虽然我们已经进行了广泛的实验评估,但是对于时间序列分类的深度学习,与计算机视觉和NLP任务不同,仍然缺乏对数据增加的全面研究(Ismail Fawaz等,2018a; Forestier等,2017)和迁移学习(Ismail Fawaz等,2018c;Serrà等,2018)。此外,时间序列社区将受益于此实证研究的扩展,该研究除了这些深度学习模型的准确性,训练和测试时间之外还要进行比较。此外,我们认为还应该彻底探索z标准化(和其他标准化方法)对DNN学习能力的影响。在我们未来的工作中,我们的目标是通过进行更广泛的实验来研究和回答上述限制,特别是在多变量时间序列数据集上。为了实现所有这些目标,TSC社区面临的一个重要挑战是提供一个类似于计算机视觉中的大型图像数据库的大型通用数据集,如ImageNet(Russakovsky等2015),其中包含1000个类。

    总之,随着数据挖掘存储库变得越来越频繁,利用可以端到端方式自动从注释数据中学习的更深层次的体系结构,使深度学习成为一种非常诱人的方法。

    总结和感悟

    通过阅读综述性的文章,可以快速了解此方向主流研究进度并有助于启发自己的研究灵感。博主本人是研究深度学习在故障诊断方面的应用的,但是发现只有去读计算机方向最前沿的算法才能有助于“引进来”,一味的只读本专业领域的论文以及交叉领域的论文是行不通的。出此之外,这篇论文在研究方法和实验设计上给本人很大的启发,详细能容请看这里。


    1. Silva DF, Giusti R, Keogh E, Batista G (2018) Speeding up similarity search under dynamic time warping by pruning unpromising alignments. Data Mining and Knowledge Discovery 32(4):988–1016 ↩︎

    2. Bagnall A, Lines J, Bostrom A, Large J, Keogh E (2017) The great time series classification bake off: a review and experimental evaluation of recent algorithmic advances. Data Mining and Knowledge Discovery 31(3):606–660 ↩︎ ↩︎

    3. Längkvist M, Karlsson L, Loutfi A (2014) A review of unsupervised feature learning and deep learning for time-series modeling. Pattern Recognition Letters 42:11 – 24 ↩︎

    4. Cristian Borges Gamboa J (2017) Deep learning for time-series analysis. ArXiv ↩︎

    5. Lines J, Bagnall A (2015) Time series classification with ensembles of elastic distance measures. Data Mining and Knowledge Discovery 29(3):565–592 ↩︎

    6. Bagnall A, Lines J, Bostrom A, Large J, Keogh E (2017) The great time series classification bake off: a review and experimental evaluation of recent algorithmic advances. Data Mining and Knowledge Discovery 31(3):606–660 ↩︎

    7. Bagnall A, Lines J, Hills J, Bostrom A (2016) Time-series classification with COTE: The collective of transformation-based ensembles. In: International Conference on Data Engineering, pp 1548–1549 ↩︎

    8. Lines J, Taylor S, Bagnall A (2016) HIVE-COTE: The hierarchical vote collective of transformation-based ensembles for time series classification. In:IEEE International Conference on Data Mining, pp 1041–1046
      Lines J, Taylor S, Bagnall A (2018) Time series classification with hive-cote: The hierarchical vote collective of transformation-based ensembles. ACM Transactions on Knowledge Discovery from Data 12(5):52:1–52:35 ↩︎

    9. LeCun Y, Bengio Y, Hinton G (2015) Deep learning. Nature 521:436–444 Lin S, Runger GC (2018) Gcrnn: Group-constrained convolutional recurrent neural network. IEEE Transactions on Neural Networks and Learning Systems pp 1–10 ↩︎

    10. Wang Z, Yan W, Oates T (2017b) Time series classification from scratch with deep neural networks: A strong baseline. In: International Joint Conference on Neural Networks, pp 1578–1585 ↩︎

    11. Zhang C, Bengio S, Hardt M, Recht B, Vinyals O (2017) Understanding deep learning requires rethinking generalization. In: International Conference on Learning Representations ↩︎

    12. Cristian Borges Gamboa J (2017) Deep learning for time-series analysis. ArXiv ↩︎

    13. Längkvist M, Karlsson L, Loutfi A (2014) A review of unsupervised feature learning and deep learning for time-series modeling. Pattern Recognition Letters 42:11 – 24 ↩︎

    14. Ordó¨nez FJ, Roggen D (2016) Deep convolutional and LSTM recurrent neural networks for multimodal wearable activity recognition. Sensors 16 ↩︎

    15. Nweke HF, Teh YW, Al-garadi MA, Alo UR (2018) Deep learning algorithms for human activity recognition using mobile and wearable sensor networks:State of the art and research challenges. Expert Systems with Applications 105:233 – 261 ↩︎

    16. Geng Y, Luo X (2018) Cost-sensitive convolution based neural networks for imbalanced time-series classification. ArXiv ↩︎

    17. Cui Z, Chen W, Chen Y (2016) Multi-scale convolutional neural networks for time series classification. ArXiv ↩︎

    18. Glorot X, Bengio Y (2010) Understanding the difficulty of training deep feedforward neural networks. In: International Conference on Artificial Intelligence and Statistics, vol 9, pp 249–256 ↩︎

    19. Wang Z, Yan W, Oates T (2017b) Time series classification from scratch with deep neural networks: A strong baseline. In: International Joint Conference on Neural Networks, pp 1578–1585 ↩︎

    20. Vaswani A, Shazeer N, Parmar N, Uszkoreit J, Jones L, Gomez AN, Kaiser Lu, Polosukhin I (2017) Attention is all you need. In: Advances in NeuralInformation Processing Systems, pp 5998–6008 ↩︎

    21. Ismail Fawaz H, Forestier G, Weber J, Idoumghar L, Muller PA (2018c) Transfer learning for time series classification. In: IEEE International Conference on Big Data ↩︎

    22. Zhou B, Khosla A, Lapedriza A, Oliva A, Torralba A (2016) Learning deep features for discriminative localization. In: IEEE Conference on Computer Vision and Pattern Recognition, pp 2921–2929 ↩︎ ↩︎

    展开全文
  • 基于深度学习时间序列分类[含代码]

    万次阅读 多人点赞 2019-03-12 18:10:12
    基于深度学习时间序列分类引言数据集实验环境搭建实验设计实验代码实验结果 引言 目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集另一方缺乏...

    引言

    目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集另一方缺乏优秀的顶级论文。在工业上的故障诊断领域,大多数据都来自于传感器的采集,如是西储大学轴承数据,TE化工数据集等,都是典型的时间序列,因而绝大多数问题可以抽象成时间序列分类(TSC)问题。因此本人准备从时间序列分类出发,用典型的深度学习方法,如多层感知器,卷积神经网络,递归神经网络等去测试UCR数据集(共128个时间序列数据集)和自己仿真的时间序列,由此得到一些启发和规律,再将这些知识迁移到工业上的故障诊断领域。为了方便大家阅读和复现代码,本文就不再有过多的数学推到,多以代码和如何使用代码为主,用最直观的方式去解释一些实验结果。

    数据集

    在时间序列的数据集中,最权威的就属UCR Time Series,可以说是时间序列界的“Imagnet”,发文章必跑数据集,有一堆大牛在维护,并在2018年秋对其进行了意思大的更新。这个数据集很有意思,下载后解压密码要仔细读其PPT然后在其参考论文中寻找,如果想懒省事的朋友可以直接从这里下载。此数据集包含了128个时间序列数据集,下图为前八个
    UCR中前八个数据集
    除了前人整理好的数据集数据集,我们在初期还可以自己设计一些简单的,容易识别的数据集来进行入门以及算法的初步筛选。不仅如此,为了探究模型结构的设计所考虑的因素或者验证自己的猜想,都需要有针对性的设计一些时间序列。比如一些单变量时间序列如:
    方波,正弦波,锯齿波,等等,如下图所示
    各种典型的时间序列
    一些简单的多变量时间序列如下图所示
    在这里插入图片描述

    实验环境搭建

    本文的实验使用python语言,所用的开发模型为Tensorflow和带有Tensorflow后端的Keras,所需的环境依赖如下:
    1.tensorflow-gpu>=1.2.0
    2.keras>=2.0.4
    3.scipy
    4.numpy
    5.pandas
    6.scikit-learn>=0.18.2
    7.h5py
    8.matplotlib
    9.joblib>=0.12

    尽管存在许多类型的DNN,但在此我们将重点关注用于TSC任务的三种主要DNN架构:多层感知器(MLP),卷积神经网络(CNN)和回声状态网络(ESN)。选择这三种类型的架构,因为它们是被广泛用于end to end深度学习TSC的模型。

    实验设计

    庞大的高楼是由一块块砖瓦搭建成的,同样的一个精妙的实验也是由一个个最基本的实验单元组成的。本文就如何使用一个数据集对设计好的神经网络进行训练进行设计。
    1.选择你要进行训练的数据集,弄明白样本信息以及分类状况,本文以UCR数据集中的Adiac数据集为例进行实验。
    数据集信如下:
    自动硅藻识别和分类(ADIAC)项目是一项关于根据图像自动识别硅藻(单细胞藻类)的试点研究。 该数据由该项目的博士生Andrei Jalba捐赠,该项目于21世纪初完成。 从阈值图像中提取轮廓。 据推测,时间序列是作为到参考点的距离而生成的。 数据很接近正弦。一个样本如下图所示:

    在这里插入图片描述
    训练集样本个数:390
    测试集样本个数:391
    分类种类:39
    时间序列长度:176

    2.算法选择:
    选择全卷积网络(FNC),具体结构如图所示:
    在这里插入图片描述
    3.评价网络

    实验代码

    把实验代码和数据集’Adiac’文件夹放到同一个目录里

    #!/usr/bin/env 
    # -*- coding: utf-8 -*-
    """
    Created on Sun Oct 30 20:11:19 2016
    
    @author: stephen
    """
     
    from __future__ import print_function
     
    from keras.models import Model
    from keras.utils import np_utils
    import numpy as np
    import pandas as pd
    import keras 
    from keras.callbacks import ReduceLROnPlateau
          
    def readucr(filename):
        data = np.loadtxt(filename, delimiter = ',')
        Y = data[:,0]
        X = data[:,1:]
        return X, Y
      
    nb_epochs = 1000
    
    flist  = ['Adiac']
    for each in flist:
        fname = each
        x_train, y_train = readucr(fname+'/'+fname+'_TRAIN')
        x_test, y_test = readucr(fname+'/'+fname+'_TEST')
        nb_classes = len(np.unique(y_test))
        batch_size = min(x_train.shape[0]/10, 16)
        
        y_train = (y_train - y_train.min())/(y_train.max()-y_train.min())*(nb_classes-1)
        y_test = (y_test - y_test.min())/(y_test.max()-y_test.min())*(nb_classes-1)
        
        
        Y_train = np_utils.to_categorical(y_train, nb_classes)
        Y_test = np_utils.to_categorical(y_test, nb_classes)
        
        x_train_mean = x_train.mean()
        x_train_std = x_train.std()
        x_train = (x_train - x_train_mean)/(x_train_std)
         
        x_test = (x_test - x_train_mean)/(x_train_std)
        x_train = x_train.reshape(x_train.shape + (1,1,))
        x_test = x_test.reshape(x_test.shape + (1,1,))
    
        x = keras.layers.Input(x_train.shape[1:])
    #    drop_out = Dropout(0.2)(x)
        conv1 = keras.layers.Conv2D(128, 8, 1, border_mode='same')(x)
        conv1 = keras.layers.normalization.BatchNormalization()(conv1)
        conv1 = keras.layers.Activation('relu')(conv1)
        
    #    drop_out = Dropout(0.2)(conv1)
        conv2 = keras.layers.Conv2D(256, 5, 1, border_mode='same')(conv1)
        conv2 = keras.layers.normalization.BatchNormalization()(conv2)
        conv2 = keras.layers.Activation('relu')(conv2)
        
    #    drop_out = Dropout(0.2)(conv2)
        conv3 = keras.layers.Conv2D(128, 3, 1, border_mode='same')(conv2)
        conv3 = keras.layers.normalization.BatchNormalization()(conv3)
        conv3 = keras.layers.Activation('relu')(conv3)
        
        full = keras.layers.pooling.GlobalAveragePooling2D()(conv3)    
        out = keras.layers.Dense(nb_classes, activation='softmax')(full)
        
        
        model = Model(input=x, output=out)
         
        optimizer = keras.optimizers.Adam()
        model.compile(loss='categorical_crossentropy',
                      optimizer=optimizer,
                      metrics=['accuracy'])
         
        reduce_lr = ReduceLROnPlateau(monitor = 'loss', factor=0.5,
                          patience=50, min_lr=0.0001) 
        history = model.fit(x_train, Y_train, batch_size=batch_size, nb_epoch=nb_epochs,
                  verbose=1, validation_data=(x_test, Y_test), callbacks = [reduce_lr])
        model.save('FCN_CBF_1500.h5')
    acc = history.history['acc']
    val_acc = history.history['val_acc']
    loss = history.history['loss']
    val_loss = history.history['val_loss']
    
    epochs = range(len(acc))
    
    plt.plot(epochs, acc, 'bo', label='Training acc')
    plt.plot(epochs, val_acc, 'b', label='Validation acc')
    plt.title('Training and validation accuracy')
    plt.legend()
    
    plt.figure()
    
    plt.plot(epochs, loss, 'bo', label='Training loss')
    plt.plot(epochs, val_loss, 'b', label='Validation loss')
    plt.title('Training and validation loss')
    plt.legend()
    
    plt.show()
    
    

    实验结果

    如果出现下图,那么你的第一次实验就完成了,完成了“helloworld”。那么接下来就是一个不断尝试新的网络结构,探究其结构和数据特性关系的过程了
    在这里插入图片描述
    下面是可视化结果
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 通常来说,用传统的机器学习方法(例如 KNN、DTW)进行时间序列分类能取得比较好的效果。但是,基于深度网络的时间序列分类往往在大数据集上能够打败传统方法。另一方面,深度网络必须依赖于大量的训练数据,否则...
  • 但是在时间序列分类方面,至今没有完整的有代表性的工作。本文是第一篇系统探讨基于深度迁移学习进行时间序列分类的论文。在内容上与今年 CVPR 最佳论文 Taskonomy: Disentangling Task Transfer Learning [1] 相...
  • 但是在时间序列分类方面,至今没有完整的有代表性的工作。本文是第一篇系统探讨基于深度迁移学习进行时间序列分类的论文。在内容上与今年 CVPR 最佳论文 Taskonomy: Disentangling Task Transfer Learning [1] 相...
  • 知乎:https://zhuanlan.zhihu.com/p/83130649 https://zr9558.com/2019/09/06/cnnfortimeseriesclassification/
  • 更多机器学习关注公众号。引言目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集...因此本人准备从时间序列分类出发,用典型的深度学习方法,如多...
  • 本文的主要目的是研究一种鲁棒的全功能时间序列分类方法。为此,提出了一种基于深度学习的新方法。由于时间序列数据具有复杂多变的结构,因此采用能够处理非线性复杂运算的算法比采用浅层结构的方法更为合适。虽然...
  • 但是在时间序列分类方面,至今没有完整的有代表性的工作。本文是第一篇使用深度迁移学习进行时间序列分类的论文。在内容上与今年CVPR最佳论文《Taskonomy: Disentangling Task Transfer Learning》相似,都是...
  • 最近,深度学习已经出现在机器学习领域,在从图像分类到机器翻译的广泛任务中取得了令人印象深刻的性能。将深度学习模型应用于电力负荷预测问题正引起研究者和业界的兴趣,但目前还没有对不同体系结构进行全面、完善...
  • 深度学习方法的优势 前言 人类活动识别(Human activity recognition,简称HAR)是一项具有挑战性的时间序列分类任务。它使用基于传感器的数据来预测人类的活动,传统上的识别方法需要很强的专业知识,涉及信号处理...
  • 但是在时间序列分类方面,至今没有完整的有代表性的工作。本文是第一篇使用深度迁移学习进行时间序列分类的论文。在内容上与今年CVPR最佳论文《Taskonomy: Disentangling Task Transfer Learning》相似,都是...
  • 本文讲解matlab小波工具箱实例(一):基于小波分析和深度学习时间序列分类。目录如下:链接:https://www.mathworks.com/help/wavelet/ug/classify-time-series-using-wavelet-analysis-and-deep-learning.html这个...
  • 原理+论文+实战:60篇由浅入深的时间序列预测/分类教程汇总 时间序列预测11:用电量预测 01 数据分析与建模 时间序列预测12:用电量预测 02 朴素模型多步预测建模 时间序列预测16:Encoder-Decoder LSTM 实现用电量/...
  • ml-projects:基于ML的项目,例如垃圾邮件分类时间序列分析,使用随机森林进行文本分类深度学习,贝叶斯,Python中的Xgboost
  • 朴素的贝叶斯分类器用于确定哪个深度学习者负责预测特定的时间序列。 我们提议的方法将应用于一组金融时间序列数据(日经平均股票价格),以评估所做预测的准确性。 与采用单个深度学习器来获取所有数据的常规方法...
  • 准备工作 ...(2)pycharm导入下载好的代码,十分简单,结果如下图。...(2)代码中使用的时间序列数据集: 单变量:http://timeseriesclassification.com/TSC.zip 多变量:http://www.mustafabaydo.

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 260
精华内容 104
关键字:

时间序列分类深度学习