向量表示是机器学习生态系统中的一个关键概念。无论进行什么样的任务,我们总是试图训练找所掌握的数据的意义而机器学中通常使用数字向量来对数据进行描述,发现隐藏的行为,产生有价值的见解。 随着深度学习则是通过更少的假设和更少的工作获得更有意义的数据表示。例如在NLP领域,最早的TFIDF(词频逆文档频率)是自然语言过程中采用的一种技术,用于将原始文本文档的集合转换为数字矩阵。TFIDF长期以来一直是NLP的基础,代表了一种编码文本序列的好方法。深度学习的出现首先带来了Word2Vec等新技术,然后是transformer编码。它们都是端到端的解决方案,并且在提供文本数据的数字数据表示方面更有效,并且无需(在大多数情况下)理解上下文。 在NLP领域采用深度学习嵌入表示是革命性的。通常将术语嵌入表示与涉及文本数据的应用程序相关联。这是因为很容易概括文本内容中单词的位置依赖性。 在以前的研究中一个有趣的想法可能是将NLP中获得的成就应用在时间序列域。这可能是一个完美的契合,因为时间序列数据也以位置时间关系为特征。在NLP中的这些技术可以根据潜在的时间依赖性生成有价值的数据向量表示。所以出现了很多为时间序列数据生成嵌入的方法,Time2Vec作为与模型无关的时间表示,可用于任何深度学习预测应用程序。Corr2Vec,通过研究它们的相互相关性来提取多个时间序列的嵌入表示。 在这篇文章中,我们尝试在时间序列域中应用Word2Vec。目标是利用无监督方法(如Word2Vec)的灵活性来学习有意义的时间序列嵌入。生成的嵌入应该能够捕获底层系统行为,以便在其他上下文中也可重用。数据 我们从UCI库中收集一些开源数据(在UCI许可政策内)。ParkingBirmingham数据集包含从20161004到20161219的每小时8:0016:30范围内的停车占用率。它非常适合我们的目的,因为它记录了来自不同位置的数据,使我们能够在多变量情况下进行切换。 我们拥有原始占用率(即当时停车场内有多少辆汽车)和最大停车容量。 数据中有缺失观测值的存在,也显示了一些常规的季节性模式。观察每天和每周的行为。所有停车区都倾向于在下午达到最大入住率。其中一些在工作日使用最多,而另一些则在周末更忙。 所有停车区的每小时占用率 所有停车场的每日入住率模型 如何将Word2Vec应用于时间序列数据?将Word2Vec应用于文本时,首先将每个单词映射到一个整数。这些数字代表了整个文本语料库中单词的唯一标识符,这些标识符关联独特的可训练嵌入。对于时间序列,也应该这样做。整数标识符是通过将连续时间序列分箱为间隔来创建的。在每个间隔中关联一个唯一标识符,该标识符指的是可学习的嵌入。 在离散化可以使用的时间序列之前,应该考虑对它们进行缩放。在多变量环境中工作时,这一点尤为重要。所以需要以统一的方式应用离散化来获得唯一的整数映射。考虑到我们这里使用的是停车数据,所以使用占用率序列(在0100范围内归一化)可以避免误导性学习行为。 Word2Vec架构与NLP应用程序中的架构相同。有不同的即用型解决方案。本文选择手工制作的Tensorflow实现:inputtargetInput((1,))inputcontextInput((1,))embeddingEmbedding(nbins1,32)dotDot(axes1,normalizeTrue)(〔Flatten()(embedding(inputtarget)),Flatten()(embedding(inputcontext))〕)modelModel(〔inputtarget,inputcontext〕,dot)model。compile(optimizerAdam(learningrate1e5),lossBinaryCrossentropy(fromlogitsTrue)) 训练数据和相关标签是使用skipgram生成的。它根据用户定义的窗口大小生成一对整数。同一窗口中的整数对的标签等于1。随机生成的对被标记为0。 通过检查学习的嵌入,可以看到网络可以自动识别我们数据的周期性。 每个分箱时间序列的二维嵌入可视化 通过扩展所有时间序列的嵌入表示,我们注意到小时观测和每日观测之间存在明显的分离。 每个时间序列中所有观测数据的二维嵌入可视化 这些可视化证明了本文方法的优点。在较少的假设和较少的参数设置下,我们可以生成有意义的时间序列嵌入。总结 在这篇文章中,介绍了众所周知的Word2Vec算法的推广,用于学习有价值的向量表示。我们在时间序列上下文中应用Word2Vec,并展示了这种技术在非标准NLP应用程序中的有效性。整个过程可以很容易地集成到任何地方,并且很容易用于迁移学习任务。 作者:MarcoCerliani