理論介紹:Higuchi Algorithm:
Step1:子采樣
對長度為N的序列,以間隔K進行采樣,起始點m=(1, 2, ..., K);
X_k^m:X(m),X(m+k),...,X(m+[\frac{N-m}{k}] \cdot k) m=(1, 2,...,k)
Step2:計算L_m(k)
L_m(k)=\frac{1}{k}\cdot{\frac{(\sum_{i=1}^{\lfloor\frac{N-m}{k}\rfloor})|X(m+ik)-X(m+(i-1)k|)(N-1)}{\lfloor\frac{N-m}{k}\rfloor k}]}
Step3:求均值
\langle L(k) \rangle=\frac{1}{k} \sum_{m=1}^kL_m(k)
我們知道,
\langle L(k) \rangle \propto k^{-FD} \Rightarrow FD=-\lim_{k \rightarrow \infty}\frac{\log\langle L(k) \rangle}{\log k}
代碼實現(xiàn)
# In[1]: Load some data
import _pickle as cPickle
x = cPickle.load(open('data_preprocessed_python/s01.dat', 'rb'),encoding='bytes')
arr_x = x[b'data'][0,0]
# In[2]: Constant
import numpy as np
N = arr_x.shape[0]
K = 8063
# Subsequence
from math import floor, log
L = []
for m in range(K):
sub = arr_x[m : N : K]
Length = sub.shape[0]
temp_sum = 0
for i in range(1, Length):
temp_sum += abs(sub[i] - sub[i-1])
temp_sum = temp_sum * (N-1) / (Length * K * K)
L.append(temp_sum)
存疑:有關(guān)K的取值問題,根據(jù)公式,希望K越大越好,但是現(xiàn)實中的序列數(shù)據(jù)都有一個固定的長度N,那么K是取N-1嗎,或者是說,作為一個輸入的特征,只要對每一個樣本選擇使用相同的K,就可以達到提取特征的效果了?