脑电数据集提取微分熵特征(以SEED数据集为例)

这篇具有很好参考价值的文章主要介绍了脑电数据集提取微分熵特征(以SEED数据集为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

SEED数据集是常用的脑电信号情绪识别数据集,在该数据集的Preprocessed_EEG文件夹中是原始的脑电数据,在ExtractedFeatures文件夹中是官方提取特征后的数据(提取了多种特征可直接使用)。

既然官方已经把特征提取好了为什么还要自己做特征提取?

  1. 官方并没有开源提取特征的代码。
  2. 为了处理其他数据集或者自己的数据。
  3. 微分熵(de)作为脑电中非常好的脑电特征目前在网上却很难找到实现的放发,收费的代码大多也是错的或者是不完整的。

带通滤波器

人类的脑电图中脑波频率可以在0.5到几十赫兹,通常按照频率进行分类以表示各种成分:
δ波(0.5-4Hz) ,θ波(4-8Hz),α波(8-13Hz),β波(13-32Hz),γ波(32-50Hz),这个地方很多人写的频率范围都不大一样但也没有很大的差别。我们这里使用带通滤波器来实现频段的提取。

带通滤波器代码实现

from scipy import signal

fStart = [0.5, 4, 8, 13, 32]	# 这里是起始频率
fEnd = [4, 8, 13, 32, 50]	# 这里是终止频率

results = []
for band_index, band in enumerate(fStart):
    b, a = signal.butter(4, [fStart[band_index]/fs, fEnd[band_index]/fs], 'bandpass')  # 配置滤波器 4 表示滤波器的阶数
    result = signal.filtfilt(b, a, data)  # data为要过滤的信号
    results.append(result)

最终提取到的五个频段都会存入 results 中。

微分熵

微分熵实际上是香农熵在连续信号上的推广

香农熵:对概率分布中的不确定性总量进行量化,公式如下:
脑电数据集提取微分熵特征(以SEED数据集为例)

微分熵:对连续性随机变量的概率分布中的不确定性总量进行量化,公式如下:
脑电数据集提取微分熵特征(以SEED数据集为例)

微分熵代码实现

def compute_DE(signal):
    variance = np.var(signal, ddof=1)  # 求得方差
    return math.log(2 * math.pi * math.e * variance) / 2  # 微分熵求取公式

这个代码看起来貌似和上面的公式不一样,实际上这个是微分熵的化简式。文章来源地址https://www.toymoban.com/news/detail-407079.html

完整代码(SEED数据集)

from scipy.io import loadmat
from sklearn.preprocessing import MinMaxScaler
from scipy import signal
import numpy as np
import math
import os


def compute_DE(signal):
    variance = np.var(signal, ddof=1)  # 求得方差
    return math.log(2 * math.pi * math.e * variance) / 2  # 微分熵求取公式


def load_data():
    data_dir = "../SEED/Preprocessed_EEG/"	# 这里设置为数据集相应的路径
    fs = 200
    fStart = [0.5, 4, 8, 13, 32]
    fEnd = [4, 8, 13, 32, 50]
    channel = [3, 7, 13, 23]	# 这里我选取了四个导联进行训练(AF3,F3,F8,T7)

    filename_label = "label"
    label = loadmat(data_dir + filename_label)
    label = label["label"][0]

    datasets_X, datasets_y = [], []
    for filename_data in os.listdir(data_dir):
        if filename_data in ["label.mat", "readme.txt"]:
            continue
        data_all = loadmat(data_dir + filename_data)
        scenes = list(data_all.keys())[3:]
        for index, scene in enumerate(scenes):
            dataset_X = []
            data = data_all[scene][channel]	# 如果想用上全部导联进行训练则将该行改为data = data_all[scene]
            scaler = MinMaxScaler()
            data = scaler.fit_transform(data)  # 归一化

            for band_index, band in enumerate(fStart):
                b, a = signal.butter(4, [fStart[band_index]/fs, fEnd[band_index]/fs], 'bandpass')  # 配置滤波器 4 表示滤波器的阶数
                filtedData = signal.filtfilt(b, a, data)  # data为要过滤的信号
                filtedData_de = []

                for lead in range(len(channel)):
                    filtedData_split = []
                    # 计算微分熵
                    for de_index in range(0, filtedData.shape[1] - fs, fs):
                        filtedData_split.append(compute_DE(filtedData[lead, de_index: de_index + fs]))
                    # 这里将每个样本大小进行统一,如果想通过滑动窗口截取样本可在这一行下面自行修改
                    if len(filtedData_split) < 265:
                        filtedData_split += [0.5] * (265-len(filtedData_split))
                    filtedData_de.append(filtedData_split)
                filtedData_de = np.array(filtedData_de)
                dataset_X.append(filtedData_de)


            datasets_X.append(dataset_X)
            datasets_y.append(label[index])

    datasets_X, datasets_y = np.array(datasets_X), np.array(datasets_y)


if __name__ == "__main__":
    datasets_X, datasets_y = load_data()
    print(datasets_X.shape)
    print(datasets_y.shape)

到了这里,关于脑电数据集提取微分熵特征(以SEED数据集为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【大数据】文本特征提取与文本相似度分析

    写在博客前的话: 本文主要阐述如何对一段简短的文本做 特征提取 的处理以及如何对文本进行 分析 。 本文主要脉络以一个故事 s t o r y story s t ory 为主线,以该主线逐步延申,涉及到: 文本特征提取 、 词汇频率统计 (TF) , 反文档频率 (IDF) 以及 余弦相似度 计算的概念,

    2023年04月27日
    浏览(42)
  • 多媒体数据处理实验3:图像特征提取与检索

    1. 算法描述 功能:   使用BOF(Bag of Features)算法提取图像特征,在corel数据集(10*100)张图片上实现以图搜图,即输入数据集中某一张图,在剩下的999张图里搜索最邻近的10张图。 2.算法流程: 用 SIFT算法 提取图像的特征。每幅图像提取出几百至几千个特征点,将所有图像的特

    2024年02月07日
    浏览(68)
  • 利用矩阵特征值解决微分方程【1】

    目录 一. 特征值介绍 二. 单变量常微分方程 三. 利用矩阵解决微分方程问题 四. 小结 4.1 矩阵论 4.2 特征值与特征向量内涵 4.3 应用 线性代数有两大基础问题: 如果A为对角阵的话,那么问题就很好解决。需要注意的是,矩阵的基础行变换会改变特征值的大小。 在已知解的情况

    2024年01月18日
    浏览(52)
  • 数学建模与数据分析 || 3. 面向数据的特征提取方法: 探索性数据分析

    一般情况下, 原始数据(又称粗数据, 存在缺失、异常、无关特征多等特点)是无法直接应用于模型进行数据分析的, 因为模型强烈依赖于相关性. 这种数据需要进行 特征提取 ,将数据的列进行修正, 生成具有相关性的列. 特征提取的方法有两种, 一种是 面向数据的探索性数据分析

    2024年02月06日
    浏览(45)
  • 【机器学习-17】数据变换---小波变换特征提取及应用案列介绍

    引言   在机器学习领域,数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换,我们可以提取出更有意义的特征,提高模型的性能。在众多数据变换方法中,小波变换是一种非常有效的方法,尤其适用于处理非平稳信号和时频分析。本文将详细介绍小波变换

    2024年04月28日
    浏览(63)
  • 大数据环境下的隐私安全的图像特征提取及应用(毕业论文)

    点我完整下载:大数据环境下的隐私安全的图像特征提取及应用.docx 大数据环境下的隐私安全的图像特征提取及应用 \\\"Image Feature Extraction and Applications for Privacy Security in the Big Data Era\\\" 目录 2 摘要 3 4 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的 6 1.3 研究意义 7 第二章 大数据

    2024年01月18日
    浏览(37)
  • 特征维度降维算法——平均影响值算法(MIV)免费MATLAB代码获取,西储大学数据为例

            众所周知,常用的特征维度降维方法有主成分分析,因子分析法,平均值影响法。而平均影响值算法(MIV)是神经网络对输入变量进行降维的最好方法之一。         在神经网络模型实际应用中,由于没有明确的理论来确定输入变量,即网络输入神经元难以确

    2024年02月08日
    浏览(56)
  • AI实践与学习1_NLP文本特征提取以及Milvus向量数据库实践

    随着NLP预训练模型(大模型)以及多模态研究领域的发展,向量数据库被使用的越来越多。 在XOP亿级题库业务背景下,对于试题召回搜索单单靠着ES分片集群普通搜索已经出现性能瓶颈,因此需要预研其他技术方案提高试题搜索召回率。 现一个方案就是使用Bert等模型提取试

    2024年01月24日
    浏览(48)
  • 机器学习图像特征提取—SIFT特征提取原理及代码实现

    目录 1 SIFT简介 2 SIFT原理及特点 2.1 SIFT算法特点 2.2 SIFT特征检测 3 SIFT代码实现        SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。       SIF

    2024年02月06日
    浏览(45)
  • 特征选择与特征提取

       卷积解决的问题:卷积负责提取图像中的局部特征.   特征意为可作为事物特点的象征、标志等。在一些实际问题中,我们得到的样本数据都是多个维度的,即一个样本是用多个特征来表征的。比如在预测房价的问题中,影响房价y的因素有房子面积x1、卧室数量x2等,

    2023年04月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包