如何理解時間序列?— 從 Riemann 積分和 Lebesgue 積分談起

Riemann 積分和 Lebesgue 積分是數學中兩個非常重要的概念。本文將會從 Riemann 積分和 Lebesgue 積分的定義出發,介紹它們各自的性質和聯繫。

積分

Riemann 積分

Riemann 積分雖然被稱為 Riemann 積分,但是在 Riemann 之前就有學者對這類積分進行了詳細的研究。早在阿基米德時代,阿基米德為了計算曲線 x^{2} 在 [0,1] 區間上與 X 坐標軸所夾的圖形面積,就使用了 Riemann 積分的思想。 他把 [0,1] 區間等長地切割成 n 段,每一段使用一個長方形去逼近 x^{2} 這條曲線的分段面積,再把 n 取得很大,所以得到當 n 趨近於無窮的時候,就知道該面積其實是 1/3。

下面來看一下 Riemann 積分的詳細定義。

考慮定義在閉區間 [a,b] 上的函數 f(x)

取一個有限的點列 a=x_{0}<x_{1}<cdots<x_{n}=b lambda = max(x_{i+1}-x_{i}) 表示這些區間長度的最大值,在這裡  0leq ileq n-1 。在每一個子區間上 [x_{i},x_{i+1}] 上取出一個點  t_{i}in[x_{i},x_{i+1}] 。而函數 f(x) 關於以上取樣分割的 Riemann 和就是以下公式:

 sum_{i=0}^{n-1}f(t_{i})(x_{i+1}-x_{i}).

當我們說該函數 f(x) 在閉區間 [a,b] 上的取值是 s 的意思是:

對於任意 epsilon>0 ,存在 delta>0 使得對於任意取樣分割,當 lambda<delta 時,就有

|sum_{i=0}^{n-1}f(t_{i})(x_{i+1}-x_{i}) - s|<epsilon.

通常來說,用符號來表示就是: int_{a}^{b}f(x)=s.

用幾幅圖來描述 Riemann 積分的思想就是:

Lebesgue 積分

Riemann 積分是為了計算曲線與 X 軸所圍成的面積,而 Lebesgue 積分也是做同樣的事情,但是計算面積的方法略有不同。要想直觀的解釋兩種積分的原理,可以參見下圖:

Riemann 積分(上)與 Lebesgue 積分(下)

Riemann 積分是把一條曲線的底部分成等長的區間,測量每一個區間上的曲線高度,所以總面積就是這些區間與高度所圍成的面積和。

Lebesgue 積分是把曲線化成等高線圖,每兩根相鄰等高線的差值是一樣的。每根等高線之內含有它所圈著的長度,因此總面積就是這些等高線內的面積之和。

用再形象一點的語言來描述就是:吃一塊漢堡有多種方式

  1. Riemann 積分:從一個角落開始一口一口吃,每口都包含所有的配料;
  2. Lebesgue 積分:從最上層開始吃,按照「麵包-配菜-肉-蛋-麵包」的節奏,一層一層來吃。

再看一幅圖的表示就是:Riemann 積分是按照藍色的數字順序相加的,Lebesgue 積分是按照紅色的數字來順序相加的。

基於這些基本的思想,就可以給出 Lebesgue 積分的定義:

簡單函數指的是對指示函數的有限線性組合,i.e. sum_{k}a_{k}I_{S_{k}} ,這裡的 a_{k} 是係數, S_{k} 是可測集合,I 表示指示函數。當a_{k}非負時,令

 int(sum_{k}a_{k}1_{S_{k}})dmu = sum_{k}a_{k}int 1_{S_{k}}dmu = sum_{k}a_{k}mu(S_{k}).

如果 f 是一個非負可測函數時,可以定義函數 f 在可測集合 E 上的 Lebesgue 積分是:

int_{E}f dmu = sup{int_{E}sdmu: old{0}leq sleq f},

這裡的 s 指的是非負簡單函數, old{0} 表示零函數,這裡的大小關係表示對定義域內的每個點都要成立。

而對於可測函數時,可以把可測函數 f 轉換成 f= f^{+}-f^{-},而這裡的f^{+}f^{-} 都是非負可測函數。所以可以定義任意可測函數的 Lebesgue 積分如下:

int fdmu = int f^{+}dmu - int f^{-}dmu.

Riemann 積分與 Lebesgue 積分的關係

定義了兩種積分之後,也許有人會問它們之間是否存在矛盾?其實,它們之間是不矛盾的,因為有學者證明了這樣的定理:

如果有界函數 f 在閉區間 [a,b] 是 Riemann 可積的,則它也是 Lebesgue 可積的,並且它們的積分值相等:

(R)int_{a}^{b}f(x)dx = (L)int_{[a,b]}f(x)dx.

左側是表示 Riemann 積分,右側表示 Lebesgue 積分。

形象化一點的語言描述就是:無論從角落一口一口地吃漢堡,還是從頂至下一層一層吃,所吃的漢堡都是同一個。

但是 Lebesgue 積分比 Riemann 積分有著更大的優勢,例如 Dirichlet 函數,

  1. x 是有理數時, D(x) = 1;
  2. x 是無理數時, D(x) = 0. .

Dirichlet 函數是定義在實數軸的函數,並且值域是 {0,1} ,無法畫出函數圖像,它不是 Riemann 可積的,但是它 Lebesgue 可積。

時間序列

提到時間序列,也就是把以上所討論的連續函數換成離散函數而已,把定義域從一個閉區間  [a,b] 換成  {1,2,3,cdots} 這樣的定義域而已。所以,之前所討論的很多連續函數的想法都可以應用在時間序列上。

時間序列的表示 --- 基於 Riemann 積分

現在我們可以按照 Riemann 積分的計算方法來表示一個時間序列的特徵,於是就有學者把時間序列按照橫軸切分成很多段,每一段使用某個簡單函數(線性函數等)來表示,於是就有了以下的方法:

  1. 分段線性逼近(Piecewise Linear Approximation)
  2. 分段聚合逼近(Piecewise Aggregate Approximation)
  3. 分段常數逼近(Piecewise Constant Approximation)

說到這幾種演算法,其實最本質的思想就是進行數據降維的工作,用少數的數據來進行原始時間序列的表示(Representation)。用數學化的語言來描述時間序列的數據降維(Data Reduction)就是:把原始的時間序列 {x_{1},cdots,x_{N}}{x_{1}^{},cdots, x_{D}^{}} 來表示,其中 D<N 。那麼後者就是原始序列的一種表示(representation)。

分段聚合逼近(Piecewise Aggregate Approximation)--- 類似 Riemann 積分

在這種演算法中,分段聚合逼近(Piecewise Aggregate Approximation)是一種非常經典的演算法。假設原始的時間序列是 C = {x_{1},cdots, x_{N}},定義 PAA 的序列是: overline{C} = {overline{x}_{1},cdots,overline{x}_{w}},

其中

overline{x}_{i} = frac{w}{N} cdot sum_{j=frac{N}{w}(i-1)+1}^{frac{N}{w}i} x_{j}.

在這裡 1leq ileq w 。用圖像來表示那就是:

至於分段線性逼近(Piecewise Linear Approximation)和分段常數逼近(Piecewise Constant Approximation),只需要在  overline{x}_{i} 的定義上稍作修改即可。

符號特徵(Symbolic Approximation)--- 類似用簡單函數來計算 Lebesgue 積分

在推薦系統的特徵工程裡面,特徵通常來說可以做歸一化,二值化,離散化等操作。例如,用戶的年齡特徵,一般不會直接使用具體的年月日,而是劃分為某個區間段,例如 0~6(嬰幼兒時期),7~12(小學),13~17(中學),18~22(大學)等階段。

其實在得到分段特徵之後,分段特徵在某種程度上來說依舊是某些連續值,能否把連續值劃分為一些離散的值呢?於是就有學者使用一些符號來表示時間序列的關鍵特徵,也就是所謂的符號表示法(Symbolic Representation)。下面來介紹經典的 SAX Representation。

如果我們希望使用 alpha 個符號來表示時間序列,那麼我們其實可以考慮正態分布 N(0,1),用{z_{1/alpha},cdots,z_{(alpha-1)/alpha}} 來表示 Gauss 曲線下方的一些點,而這些點把 Gauss 曲線下方的面積等分成了 alpha 段。用 {l_{1},cdots,l_{alpha}} 表示 alpha 個字母。

SAX 方法的流程如下:

  1. 正規化(normalization):把原始的時間序列映射到一個新的時間序列,新的時間序列滿足均值為零,方差為一的條件。
  2. 分段表示(PAA): {x_{1},cdots, x_{N}} Rightarrow {overline{x}_{1},cdots,overline{x}_{w}}.
  3. 符號表示(SAX):如果 overline{x}_{i}<z_{1/alpha} ,那麼 hat{X}_{i}=l_{1} ;如果 z_{(j-1)/alpha}leq overline{x}_{i}<z_{j/alpha} ,那麼 hat{X}_{i} = l_{j} ,在這裡 2leq jleq alpha;如果 overline{x}_{i}geq z_{(alpha-1)/alpha} ,那麼 hat{X}_{i} = l_{alpha}

於是,我們就可以用{l_{1},cdots,l_{alpha}} alpha 個字母來表示原始的時間序列了。

時間序列的表示 --- 基於 Lebesgue 積分

要想考慮一個時間序列的值分布情況,其實就類似於 Lebesgue 積分的計算方法,考慮它們的分布情況,然後使用某些函數去逼近時間序列。要考慮時間序列的值分布情況,可以考慮熵的概念。

熵(Entropy)

通常來說,要想描述一種確定性與不確定性,熵(entropy)是一種不錯的指標。對於離散空間而言,一個系統的熵(entropy)可以這樣來表示:

	ext{entropy}(X) = -sum_{i=1}^{infty}P{x=x_{i}}ln(P{x=x_{i}})

如果一個系統的熵(entropy)越大,說明這個系統就越混亂;如果一個系統的熵越小,那麼說明這個系統就更加確定。

提到時間序列的熵特徵,一般來說有幾個經典的熵指標,其中有一個就是 binned entropy。

分桶熵(Binned Entropy)

從熵的定義出發,可以考慮把時間序列的值進行分桶的操作,例如,可以把 [min, max] 這個區間等分為十個小區間,那麼時間序列的取值就會分散在這十個桶中。根據這個等距分桶的情況,就可以計算出這個概率分布的熵(entropy)。i.e. Binned Entropy 就可以定義為:

 	ext{binned entropy}(X) = -sum_{k=0}^{min(maxbin, len(X))} p_{k}ln(p_{k})cdot 1_{(p_{k}>0)},

其中 p_{k} 表示時間序列 X 的取值落在第 k 個桶的比例(概率),maxbin 表示桶的個數,len(X) 表示時間序列 X 的長度。

如果一個時間序列的 Binned Entropy 較大,說明這一段時間序列的取值是較為均勻的分布在 [min, max] 之間的;如果一個時間序列的 Binned Entropy 較小,說明這一段時間序列的取值是集中在某一段上的。

總結

在本篇文章中,筆者從 Riemann 積分和 Lebesgue 積分出發,介紹了它們的基本概念,性質和聯繫。然後從兩種積分出發,探討了時間序列的分段特徵,時間序列的熵特徵。在未來的 Blog 中,筆者將會介紹時間序列的更多相關內容。

推薦閱讀:

TAG:數學 | 微積分 | 時間序列分析 |