理解動態時間扭曲
2019年4月30日 在工程的博客
這個博客是我們由兩部分組成的係列文章的第1部分使用動態時間扭曲和MLflow檢測銷售趨勢。第2部分去,去使用動態時間扭曲和MLflow檢測銷售趨勢。
“動態時間扭曲,”在第一次讀,可能聯想的馬蒂McFly駕駛他的汽車以每小時88英裏的速度在《回到未來係列。唉,動態時間扭曲不涉及時間旅行;相反,它是一種技術用於動態時間序列數據進行比較的時候指數之間的比較數據點並不完全同步。
如下我們將探索,其中最突出的使用動態時間扭曲的語音識別,確定是否一個短語匹配另一個,即使這句話是快或慢於其口語的比較。你可以想象這方便識別”後“用來激活你的穀歌家裏或亞馬遜Alexa設備——即使你的說話語速很慢,因為你還沒有日常的咖啡。
動態時間扭曲是一個有用的、強大的技術,可以應用在許多不同的領域。一旦你了解動態時間扭曲的概念,很容易看到在日常生活中的應用的例子,和它的激動人心的未來的應用。考慮以下用途:
- 金融市場——比較股票交易數據類似的時間框架,即使他們並不完全匹配。例如,比較月度貿易數據(28天)2月和3月(31天)。
- 可穿戴健身追蹤器——更準確地計算沃克的速度和數量的步驟,即使他們的速度不同。
- 路徑計算——計算更準確的司機的埃塔的信息,如果我們知道一些關於他們的駕駛習慣(例如,他們開車很快馬上但花費更多的時間比平均左轉彎)。
數據科學家,數據分析師,以及任何處理時間序列數據應該熟悉這個技術,考慮到完全一致的時間序列數據可以比較,很少看到在野外完全“整潔”數據。
在這個博客係列中,我們將探討:
- 動態時間彎曲的基本原則
- 運行動態時間扭曲音頻數據樣本
- 運行動態時間扭曲示例使用MLflow銷售數據
動態時間扭曲
時間序列的比較方法的目標是生產一個距離度量兩個輸入時間序列之間的關係。相似或不同的兩屆係列通常由數據轉換成向量計算和計算這些點之間的歐幾裏得距離向量空間。
動態時間扭曲是一個開創性的時間序列比較的技術已被用於語音和文字識別自1970年代與聲波作為源;另一個常用的紙動態時間扭曲孤立詞識別基於命令圖搜索技術。
背景
這種技術不僅可以用於模式匹配,而且異常檢測(如重疊時間序列兩個不相交的時間理解如果形狀發生了顯著變化,或檢查離群值)。例如,當看著如下圖的紅色和藍色線,注意傳統的時間序列匹配(例如歐幾裏德匹配)是非常嚴格的。另一方麵,動態時間扭曲允許兩條曲線匹配均勻盡管x軸(即時間)不一定是同步。另一種方法是認為這是一個健壯的不同分數較低的數量意味著係列更相似。
來源:維基共享:文件:Euclidean_vs_DTW.jpg
兩屆係列(基本時間序列和新的時間序列)被認為是類似的,當它是可能的映射與函數f (x)根據下列規則,使用最優匹配大小(扭曲)的道路。
聲音模式匹配
傳統上,動態時間扭曲應用於音頻片段確定的相似片段。對於我們的示例,我們將使用四個不同的音頻剪輯基於兩個不同的引用一個電視節目叫做寬闊的。有四個音頻剪輯(你可以聽他們低於但這不是必要的),其中三個(片段1、2和4)是基於引用:
“門和角落,孩子。這就是他們得到你。”
和一個夾(片段3)引用
“太快你走進一個房間,房間裏吃你。”
門和角落,孩子。 這就是他們給你。(v1) |
門和角落,孩子。 這就是他們給你。(v2) |
你走進一個房間太快, 房間裏吃你。 |
門和角落,孩子。 這就是他們給你(v3) |
引用來自寬闊的
下麵是可視化使用matplotlib
的四個音頻片段:
- 夾1:這是我們的基本時間序列的基礎上,引用“門和角落,孩子。這就是他們給你”。
- 片段2:這是一個新的時間序列(v2)基於夾1的語調和語音模式非常誇張。
- 片段3:這是另一個時間序列的基礎上報價“太快你走進一個房間,房間裏吃你。”用同樣的語調和速度,夾1所示。
- 剪輯4:這是一個新的時間序列(v3)基於夾1的語調和語音模式類似於夾1。
代碼閱讀這些音頻剪輯和可視化使用matplotlib可以歸納為下麵的代碼片段。
從scipy.io進口wavfile從matplotlib進口pyplot作為plt從matplotlib.pyplot進口圖#讀存儲音頻文件進行比較fs, data = wavfile.read (“dbfs /文件夾/ clip1.wav”)#設置情節風格plt.style.use (“seaborn-whitegrid”)#創建次要情節ax = plt.subplot (2,2,1)斧子。情節(data1、顏色=“# 67 a0da”)…#顯示創建圖無花果= plt.show ()顯示(圖)
完整的代碼可以在筆記本上找到動態時間扭曲的背景。
如下提到的,當兩個片段(在本例中,剪輯1和4)有不同的聲調(振幅)和延遲相同的引用。
如果我們遵循傳統歐幾裏德匹配(按下麵的圖),即使我們的折扣振幅、計時之間的原始剪輯(藍色)和新夾(黃色)不匹配。
用動態時間扭曲,我們可以改變時間允許時間序列對比這兩個片段。
對於我們的時間序列比較,我們將使用fastdtw
PyPi庫;磚工作區中的指令安裝PyPi庫可以在這裏找到:Azure|AWS。通過使用fastdtw,我們可以快速計算不同時間序列之間的距離。
從fastdtw進口fastdtw#夾1和剪輯2之間的距離距離= fastdtw (data_clip1 data_clip2) (0]打印(“兩個片段之間的距離是% s %距離)
完整的代碼可以在筆記本上找到動態時間扭曲的背景。
基地 | 查詢 | 距離 |
---|---|---|
夾1 | 片段2 | 480148446.0 |
片段3 | 310038909.0 | |
剪輯4 | 293547478.0 |
一些快速的觀察:
- 如前所述在前麵的圖中,剪輯1和4有最短的距離作為音頻剪輯有相同的語言和語調
- 片段1和3之間的距離也很短(盡管比夾4)相比,即使他們有不同的單詞,它們使用相同的語調和速度。
- 片段1和2有最長的距離由於極度誇張的語調和速度即使它們使用相同的報價。
如您所見,使用動態時間扭曲,可以確定兩個不同的時間序列的相似性。
下一個
既然我們已經討論了動態時間扭曲,讓我們把這個用例檢測銷售趨勢。