云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站服务器_网站设计建设_免费1年

小七 141 0

了解动态时间扭曲

在数据库里试试这个笔记本本博客是我们两部分系列文章的第1部分,使用动态时间扭曲和MLflow来检测销售趋势。要转到第2部分,请转到使用动态时间扭曲和MLflow来检测销售趋势。"动态时间扭曲"这句话,乍一看,可能会让人想起马蒂·麦克弗莱(MartyMcFly)在《回到未来》系列中以88英里每小时的速度驾驶他的德洛宁(DeLorean)的画面。唉,动态时间扭曲不涉及时间旅行;相反,它是一种在比较数据点之间的时间索引不能完全同步时动态比较时间序列数据的技术。正如下面我们将要探讨的,动态时间扭曲的一个最显著的用途是在语音识别中-确定一个短语是否匹配另一个短语,即使该短语的发音比其比较快还是慢。你可以想象,这对于识别用来激活你的谷歌主页或亚马逊Alexa设备的"唤醒词"非常有用——即使你的讲话速度很慢,因为你还没有每天喝一杯咖啡。动态时间扭曲是一种有用的、强大的技术,可以应用于许多不同的领域。一旦你理解了动态时间扭曲的概念,就很容易看到它在日常生活中的应用实例,以及它令人兴奋的未来应用。考虑以下用途:金融市场——比较相似时间段内的股票交易数据,即使它们并不完美匹配。例如,比较2月(28天)和3月(31天)的月度交易数据。可穿戴健身跟踪器-更精确地计算步行者的速度和步数,即使他们的速度随时间变化。路线计算-如果我们了解驾驶员的驾驶习惯(例如,他们在直道上行驶速度很快,但左转所需的时间比平均值长),则可以计算出更准确的驾驶员预计到达时间。数据科学家、数据分析员和任何处理时间序列数据的人都应该熟悉这种技术,因为完全一致的时间序列比较数据在野外和完全"整洁"的数据一样罕见。在本系列博客中,我们将探讨:动态时间规整的基本原理对采样音频数据运行动态时间扭曲使用MLflow对样本销售数据进行动态时间扭曲动态时间扭曲时间序列比较方法的目标是产生两个输入时间序列之间的距离度量。两个时间序列的相似性或相异性通常是通过将数据转换成向量并计算向量空间中这些点之间的欧氏距离来计算的。动态时间规整(Dynamic time warping)是20世纪70年代以来以声波为声源的语音和单词识别的一种开创性的时间序列比较技术;一篇经常被引用的论文是基于有序图搜索技术的孤立词识别动态时间规整。背景这种技术不仅可以用于模式匹配,还可以用于异常检测(例如,在两个不相交的时间段之间重叠时间序列,以了解形状是否发生了显著变化,或检查异常值)。例如,当查看下图中的红色和蓝色线条时,请注意传统的时间序列匹配(即欧几里德匹配)非常严格。另一方面,动态时间扭曲允许两条曲线均匀匹配,即使X轴(即时间)不一定同步。另一种方法是将其视为一个稳健的差异性得分,其中数字越低,表示序列越相似。来源:Wiki Commons:文件:Euclidean_vs_DTW.jpg两个时间序列(基本时间序列和新时间序列)被认为是相似的,当可以根据以下规则用函数f(x)映射,以便使用最优(翘曲)路径匹配震级。声模式匹配传统上,动态时间扭曲被应用于音频片段以确定这些片段的相似性。在我们的例子中,我们将使用四个不同的音频片段,它们来自一个名为theexpanse的电视节目的两个不同的引语。有四个音频片段(您可以在下面收听,但这不是必需的)–其中三个(片段1、2和4)基于以下引述:"门和角落,孩子。那就是他们抓你的地方。"一个片段(片段3)是引述"你走进房间太快,房间会把你吃掉。"门和角落,孩子。那就是他们抓到你的地方。[第1版]门和角落,孩子。那就是他们抓到你的地方。[v2]你走进房间太快了,房间把你吃了。门和角落,孩子。这就是他们抓你的地方[v3]引文来自广袤无垠以下是使用四个音频剪辑的matplotlib实现的可视化效果:片段1:这是我们的基本时间序列,基于"门和角落,孩子。这就是他们抓到你的地方"。剪辑2:这是一个基于剪辑1的新的时间序列[v2],其中的语调和讲话模式被极度夸大。片段3:这是另一个时间序列,它以"你走进一个房间太快,房间吃了你"这句话为基础,语调和速度与剪辑1相同。剪辑4:这是一个基于剪辑1的新的时间序列[v3],其中语调和语音模式与剪辑1相似。阅读这些音频片段并使用matplotlib可视化它们的代码可以在下面的代码片段中进行总结。从scipy.io公司导入wavfile从matplotlib导入pyplot as plt从matplotlib.pyplot导入图形#读取存储的音频文件进行比较fs,数据=wavfile.read文件("/dbfs/folder/clip1.wav")#设置打印样式plt.style.使用('seaborn-whitegrid')#创建子批次轴=plt.子批次(2,2,1)斧头图(数据1,颜色='#67A0DA')...#显示创建的地物无花果=表演()显示器(图)完整的代码库可以在笔记本动态时间扭曲背景中找到。如下所述,当两个片段(在本例中为片段1和片段4)具有不同的语调(振幅)和同一引用的延迟。如果我们遵循传统的欧几里德匹配(如下图所示),即使我们对振幅进行了折扣,原始片段(蓝色)和新片段(黄色)之间的计时并不匹配。使用动态时间扭曲,我们可以改变时间,以便对这两个片段进行时间序列比较。为了进行时间序列比较,我们将使用fastdtwpypi库;在Databricks工作区中安装PyPi库的说明可以在这里找到:Azure | AWS。利用fastdtw,可以快速计算出不同时间序列之间的距离。从fastdtw导入fastdtw#夹子1和夹子2之间的距离距离=fastdtw(数据集1,数据集2)[0]print("两个剪辑之间的距离为%s"%distance)完整的代码库可以在笔记本动态时间扭曲背景中找到。基地查询距离夹子1夹子2480148446夹子3310038909夹子4293547478 一些快速观察:如上图所示,剪辑1和4的距离最短,因为音频片段的单词和语调相同剪辑1和剪辑3之间的距离也很短(尽管比剪辑4长),尽管它们有不同的单词,但它们使用相同的语调和速度。剪辑1和剪辑2具有最长的距离,因为它们使用的语调和速度都非常夸张,即使它们使用的是同一句话。如您所见,使用动态时间扭曲,可以确定两个不同时间序列的相似性。下一个既然我们已经讨论了动态时间扭曲,让我们应用这个用例来检测销售趋势。 免费试用Databricks。今天就开始吧