1. 程式人生 > >【時間序列】時間序列分割聚類演算法TICC

【時間序列】時間序列分割聚類演算法TICC

Hallac, David, et al. “Toeplitz Inverse Covariance-Based Clustering of Multivariate Time Series Data.” KDD. (2017).

本文是2017年KDD最佳論文,解決了高維時間訊號的自動分割聚類問題,並給出了基於python的原始碼(戳這裡下載)。

核心思想

在實際問題中有大量隨時間變化的高維訊號。
- 駕駛汽車:油門,剎車,地理位置,空調,門窗…
- 支付軟體:使用者的登陸,轉入,提現,消費…

在沒有標定的情況下,想發掘這些資料中隱藏的資訊,即將訊號劃分為若干可能的狀態,並標記每條訊號的各段。
- 駕駛汽車:起步,上坡,超車,擁堵…
- 支付軟體:使用者發薪,過節,打新股…

這就需要同時對資料進行兩種操作:
- 將各條資料進行分割
- 將分割結果各個聚類

傳統聚類方法考察訊號各維度的絕對值,以確定訊號間的相似度;
本文演算法考察訊號各維度之間的相關性,以確定訊號間的相似度。

建模

訊號段

設有時間長度為T的原始訊號

x=[x1,x2...xT]

實際應用中,會有來自多個使用者的多段原始訊號。這裡可以直接將它們連綴成一個向量。如果需要考慮絕對時刻,則可以將時間戳也作為一維訊號增補上去。

其中每一時刻的訊號xin維向量。

為了便於考察訊號相關性,以每一時刻為基準,向前擷取寬度為w的一段:

Xi=[xiw+1,...xi
1
,xi]
i=1,2...T
訊號段Xinw維向量。

類別資訊

預期將所有訊號段劃分為K類,屬於第j類的訊號段序號集合記為Pj,j=1,2...K

舉例:有訊號段ABAAC,n=5, K=3P1=[0,2,3],P2=[1],P3=[4]

認為每一類訊號段服從0均值高斯分佈,其協方差逆矩陣為Θj,j=1,2...K。這是一個nw×nw的矩陣。

Θiw×w個子矩陣組成,每個子矩陣的尺寸為n×n。位置pq的子矩陣描述時刻p和時刻q之間,n個維度之間的協方差逆矩陣。

[0w+1,...p,...q,...0]
這裡假設訊號是非時變的,不同時刻訊號之間的關係只和相對時間差有關
;交換pq,其協方差逆陣互為轉置

換句話說,Θj是個分塊Toeplitz矩陣:
這裡寫圖片描述
每條斜線上的子矩陣相同;對角對稱斜線的子矩陣互為轉置。

求解

我們需要輪流求解兩個問題
- 給定Θj,求解訊號段分類方法Pj
- 給定Pj,求解各類逆協方差陣Θj

訊號段分類Pj

給定Θj,把訊號段Xi歸入j類的代價可以負對數似然表示:

E(iPj)=ll(i,j)=log[N(Xi;0,Θ1j)] =log[det(Θj)1/2exp[12XTiΘjXi]]=logdet(Θj)+XTiΘjXi

另外考慮訊號的連續性:相連訊號段不同類時施加懲罰β

E(i,i+1)={0βi,i+1i,i+1

兩個代價構成經典的流水線排程問題,可以使用BP演算法求解。
這裡寫圖片描述
其核心思路是:在給第i個訊號段分類時,只需考慮第i-1訊號段分為各類時的代價即可。

逆協方差陣

相關推薦

時間序列時間序列分割演算法TICC

Hallac, David, et al. “Toeplitz Inverse Covariance-Based Clustering of Multivariate Time Series Data.” KDD. (2017). 本文是2017年KD

機器學習:Kmeans均值演算法原理(附帶Python程式碼實現)

這個演算法中文名為k均值聚類演算法,首先我們在二維的特殊條件下討論其實現的過程,方便大家理解。 第一步.隨機生成質心 由於這是一個無監督學習的演算法,因此我們首先在一個二維的座標軸下隨機給定一堆點,並隨即給定兩個質心,我們這個演算法的目的就是將這一堆點根據它們自身的座標特徵分為兩類,因此選取了兩個質心,什麼時

無監督學習5:譜演算法原理介紹

前言:學習譜聚類,最好有一些圖論、矩陣分解(SVD)方面的知識,這樣會更加有利於譜聚類的學習。當然,譜聚類理解起來並不困難,實際操作也大多是譜聚類+K-means聚類聯合使用的。 –—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—

機器學習無監督學習-演算法-Kmeans

1.K-meansK-means,屬於無監督學習。即輸入資料沒有標籤y,經過一些演算法後,找到標籤y。聚類的目的就是找到每個樣本潛在的標籤y,並將同類別的樣本放到一起。k-means聚類:就是把n個點(可以是樣本的一次觀察或一個例項)劃分到k個聚類中,使得每個點都屬於離他最近

無監督學習2:DBSCAN演算法原理

前言:無監督學習想快一點複習完,就轉入有監督學習 –—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——- –—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—

統計學2017.05時間序列資料預測與分析

本文為布拉格捷克理工大學(作者:Oleg Ostashchuk)的碩士論文,共78頁。 本文討論了時間序列分析和預測的問題。論文的目的是研究現有的時間序列預測方法,包括必要的資料預處理步驟。本文選取了ARIMA、人工神經網路和雙指數平滑三種有前景的預測方法。本文的主要工作是對所提供的資

bzoj 3675[Apio2014]序列分割

fde 操作 using con 列分割 bzoj mes input 遊戲 Description 小H最近迷上了一個分隔序列的遊戲。在這個遊戲裏,小H需要將一個長度為n的非負整數序列分割成k+1個非空的子序列。為了得到k+1個子序列,小H需要重復k次以下的步驟: 1.小

時間序列演算法-《k-Shape: Efficient and Accurate Clustering of Time Series》解讀

摘要 本文提出了一個新穎的時間序列聚類演算法k-shape,該演算法的核心是迭代增強過程,可以生成同質且較好分離的聚類。該演算法採用標準的互相關距離衡量方法,基於此距離衡量方法的特性,提出了一個計算簇心的方法,在每一次迭代中都用它來更新時間序列的聚類分配。作者通過大量和具有

洛谷堆+結論P4597 序列sequence

由於 最大值 隊列 get alt 選擇 向上 span 小數 【題目背景:】 原題cf13c 數據加強版(就是說原來能用DP做現在不行了QwQ) 【題目描述:】 給定一個序列,每次操作可以把某個數+1-1。要求把序列變成非降數列。而且要求修改後的數列只能出現修改前的數。

考研 演算法資料結構時間複雜度的計算 配套例子詳解

【資料結構】時間複雜度的計算  配套例子詳解 一、什麼是演算法: 演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。 演算法的特徵: 一個演算法應該具有以下五個重要的特徵: 有

time模組時間戳轉換為日期或者時間

import time def timeStampToDate(timeStamp): timeArray = time.localtime(timeStamp) date = time.strftime("%Y-%m-%d", timeArray)

資料結構時間複雜度和空間複雜度

衡量一個演算法的複雜度: 即演算法的時間複雜度和空間複雜度統稱為演算法的時間複雜度。 時間複雜度 計算一下下面程式的迴圈語句總共會執行多少次? void Test(int n) { int iConut = 0; for (int i = 0; i &l

DRF框架利用序列化元件操作

使用序列化元件進行操作 不帶引數:查+增 帶引數:查、改、刪   不帶引數的操作 # url路由 url(r'^book_list/$',Search_book.as_view()), # views.py from utils.serializers import Bo

LOJ#6074序列(動態規劃)

【LOJ#6074】子序列(動態規劃) 題面 LOJ 題解 考慮一個暴力\(dp\)。 設\(f[i][c]\)表示當前在第\(i\)位,並且以\(c\)結尾的子序列個數。 那麼假設當前位為\(a\),強制把\(a\)接在所有出現過的子序列後面,再加上一個單獨的\(a\)。 也就是\(f[i][a]=

帝國CMS時間格式改成幾分鐘,幾小時,幾天前等外掛

在網上試了好幾個,終於通過各種組合,成功了一個,發出來給大家看看,同時六個備份,以便以後自己使用。在此還是得感覺懂程式碼的貢獻者。不多說,放碼。 把以下的內容複製到 /e/class/userfun.php 檔案裡,放在<?php和?>之間就可以了。 func

資料結構時間複雜度&&空間複雜度

演算法效率       演算法效率分析分為兩種:第-種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。時間複雜度主要衡量的是一 個演算法的執行速度, 而空間複雜度主要衡量一個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存

資料結構-時間複雜度和空間複雜度

  在閱讀這篇文章之前,建議大家先對 【資料結構】-巨集觀認識進行閱讀,對資料結構有一個巨集觀的瞭解。我們使用時間複雜度和空間複雜度對演算法進行分析。 時間複雜度   演算法包含的計算量。   大O

職業生涯時間管理

  ”時間管理“這個話題對於我來講,是個比較難於解決的大問題。剛看到幾篇文章,順便總結感悟分析。   時間管理,之前我總是有時候發現自己每天時間不夠用計劃趕不上變化好多事情沒完成,當然有時也因此有消極

前端js時間與毫秒數互相轉換

【1】js毫秒時間轉換成日期時間 var oldTime = (new Date("2012/12/25 20:11:11")).getTime(); //得到毫秒數 //不是上面格式的時間需要

Python程式設計時間轉換器案例

#!/usr/bin/env python # -*- coding:utf8 -*- from datetime import datetime from dateutil import parse