分形维度特征——基于Python实现

理论介绍: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}

代码实现

# 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)

存疑:有关K的取值问题,根据公式,希望K越大越好,但是现实中的序列数据都有一个固定的长度N,那么K是取N-1吗,或者是说,作为一个输入的特征,只要对每一个样本选择使用相同的K,就可以达到提取特征的效果了?

你可能感兴趣的:(分形维度特征——基于Python实现)