【DAY7】使用Python-pyts库库格拉姆角场GramianAngularField(GAF)、马尔可夫变迁场(MTF)、递归图(RP)对一维时间序列数据-情绪脉率变异性-进行图像编码

为什么要对时间序列进行图像编码

来源:
Wang 等人写的一篇论文:Imaging Time-Series to Improve Classification and Imputation,通过将时间序列图像化提高分类和推断。
他将流量的每个字节转换成像素,由此来把流量转换为图片,再将图片作为CNN的输入进行训练与分类,得到的二分类和多分类准确率分别是100%和99.17%。

为什么对时间序列图像化能够提高模型的分类准确率?
因为一维信号可能存在数据维度和丰富度的不足,限制了模型从数据中中提取出复杂特征和特征局部相关性的能力。
GAF(Gramian Angular Field)将时间序列映射为图像,侧重于周期性和幅度信息的表达,增加了数据的维度和丰富度。

Python-pyts库

pyts库是一个用于时间序列分析的开源Python库。它提供了一系列的数据预处理方法、特征提取技术以及常用的机器学习模型,可以用于单变量和多变量时间序列数据分析。

使用格拉姆角场GramianAngularField函数

先导入pyts库

pip install pyts

导入脉率变异性数据。data_x 维度是90×80,即90个样本,80维特征。

# 导入数据HappyHeartRate
data = pd.read_csv("../AnxietyPPData.csv")
data_x = data.iloc[:,0:80]#选择输入数据
data_y = data.iloc[:,80]#选择输出数据

进行归一化。将数据缩放到一个固定的范围(0到1),使得不同特征的数据在同一尺度上,便于比较和计算。(按列计算,把每一列特征都缩放到0~1)

#归一化化处理
from sklearn import preprocessing
mm = preprocessing.MinMaxScaler()
data_x = mm.fit_transform(data_x)
print(data_x)
data_y = np.array(data_y )
data_y = data_y.reshape(-1, 1)

使用格拉姆角场函数对数据进行变换,并显示图像化的图片

Anxiety = []
j = 0
for i in data_x:
    # 格拉姆角场函数要求数据输入格式为(1,-1),因此要把i变成二维的
    data = np.array(i).reshape(1, -1)
    # 这里的image_size=80是因为数据有80维特征,所以构建80*80的图片
    gadf = GramianAngularField(image_size=80, method='difference')
    X_gadf = gadf.fit_transform(data)
    print(X_gadf)
    Anxiety.append(X_gadf)
    
    plt.figure(figsize=(5, 5))
    # cmap='rainbow'指定了颜色映射方案为彩虹色
    # origin='lower'表示图像的原点在左下角
    plt.imshow(X_gadf[0], cmap='rainbow', origin='lower')
    plt.tight_layout()# 自动调整子图参数,使之填充整个图像区域,避免重叠
    plt.axis('off')
    # plt.savefig("." + str(j) + ".jpg",dpi=600,pad_inches=0.0,bbox_inches = 'tight')
    plt.show()
    j = j+1
    

在这里插入图片描述
然后将变换后的图像数据保存成MATLAB格式

import scipy.io
import scipy.io as scio
scipy.io.savemat('Anxiety.mat', {'Anxiety': Anxiety})

需要用数据的时候再加载数据

dataAnxiety = scio.loadmat('Anxiety.mat')
dataSad = scio.loadmat('Sad.mat')
dataHappy = scio.loadmat('Happy.mat')
dataStress = scio.loadmat('Stress.mat')
dataPeace = scio.loadmat('Peace.mat')

使用马尔可夫变迁场MarkovTransitionField函数

马尔可夫变迁场和格拉姆角场是同一篇论文提出来的,所以使用的时候只需要把上面代码的GramianAngularField改成MarkovTransitionField函数就行。

Anxiety = []
j = 0
for i in data_x:
    data = np.array(i).reshape(1, -1)
    mtf = MarkovTransitionField(image_size=80)
    X_mtf = mtf.fit_transform(data)
    Anxiety.append(X_mtf)

在这里插入图片描述

使用递归图RecurrencePlot函数

RecurrencePlot函数也是pyts库写好的函数,可以直接用。

Anxiety = []
for i in data_x:
    data = np.array(i).reshape(1, -1)
    rp = RecurrencePlot(threshold='point', percentage=20)
    X_rp = rp.fit_transform(data)
    Anxiety.append(X_rp)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值