多变量时间序列分类在数据预处理阶段遇到的问题

最近在做脑疾病的静息态功能磁共振成像(Rs-fMRI)数据的分类,Rs-fMRI数据也包括成像数据和非成像数据,这里只讨论关于成像数据的一些问题。

成像数据又包括功能磁共振图像数据以及从功能磁共振图像数据中按照一定的预处理步骤提取出来的BOLD信号时间序列数据。

这里的BOLD信号时间序列数据也就是多变量时间序列数据的一种,但是经过预处理得到的时间序列数据都是以.mat文件形式进行存储的,而现在对于大多数多变量时间序列数据进行处理的sktime包都是输入.ts后缀的文件并读取为dataframe形式。

BOLD信号时间序列的.mat后缀文件使用

scipy.io.loadmat()

读取,得到的是三维np.array数据(形状为(batch_size, num_ROIs, num_timesteps)),而使用

sktime.load_from_tsfile_to_dataframe()

读取.ts后缀文件得到的是pd.dataframe数据(二维的dataframe,形状为(batch_size, num_ROIs),第二个维度里的每一个单元格里都是一个num_timesteps长度的时间序列数据)。

由于现有的时间序列分类模型都是接受.ts文件作为输入并读取为dataframe数据,而自己现有的数据又只能读取为三维的array数据,无法直接输入到现有的多变量时间序列模型中,因此想找到一种方法可以进行这种转换,但是暂未找到,所以作为一个记录贴放在这儿吧,等找到解决方法了就更新。

=========================================================================

更新于2022/10/6

自己编写了一个函数实现从三维数组到二维dataframe的变换函数:

def from_array_to_dataframe(X):
    # 一共三个维度,将每个人每个脑区的时间序列存入一个单元格中
    b_s = X.shape[0]
    n_rois = X.shape[1]
    n_ts = X.shape[2]
    # 创建空dataframe
    df = pd.DataFrame(dtype=np.float32)
    # 循环将时间序列数据写入dataframe中
    for v1 in range(n_rois):
        df['dim_' + str(v1)]=[ X[v0][v1] for v0 in range(b_s)]
    return df

并且进行调试:

if __name__ == '__main__':
    X = np.zeros((32, 116, 140))
    df = from_array_to_dataframe(X)
    print(df.values.shape)    
    print(len(df.values[0][0]))

输出:

(32, 116)
140

达到目的。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值