CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五)

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五)

概述

由于癫痫发作时不是整个大脑区域都有相关的反映,因此 EEG 信号在不同的 EEG 通道上有着不同的表现形式。癫痫发作时的 EEG 信号表现也并不是存在于所有的 EEG 通道,如果能设计一种算法来筛选出最能反应患者癫痫发作的 EEG 通道,不仅能减少模型的计算量,还能减少模型的硬件资源开销,同时还能提高癫痫预测的效率。所以在完成癫痫发作的预测任务之前设计一种有效的 EEG 通道选择算法是非常 有必要的。

通道选择模型

EEG 信号在不同患者的不同脑电通道上有着不同的表 现,因此需要对每个患者做单独的优化。如果使用传统的 SVM 等分类模型,将导致 效率异常低下,所以为完成EEG 通道选择任务,此部分使用了并行化能力强, 效率高的 LightGBM 作为分类器。 GBDT(Gradient Boosting Decision Tree)是机器学习领域中一个非常典型的模型, 它主要使用决策树方法对模型进行迭代训练,使得模型参数更新到最优状态,该模型 使用范围广泛,可以用于各种分类与预测任务中,而且它训练得到的模型性能优于一 般的其它类的机器学习模型,除此之外,它还具有很高的训练效率。 LightGBM(Light Gradient Boosting Machine)是机器学习中的一个经典框架,由于 它是 GBDT 的升级版本,所以具有 GBDT 的优点。并行能力强是它最大的优势, 这将会极大的提高模型的收敛速度,使得模型参数很快达到最优。与传统的 SVM 相 比,使用 LightGBM 完成癫痫发作的检测和预测任务,在时间上会提升一半以上,而 且实验的结果还优于 SVM。因此在进行脑电通道选择过程时,使用 LightGBM 来测试通道选择的有效性。

通道选择

使用 LightGBM 作为此部分实验的分类器,将处理好的 EEG 数据输入到LightGBM 模型中进行模型训练和分类,直至保留的 EEG 通道数减少至本次通道缩 减后模型的准确率低于所有通道上模型的准确率,这样就可以得到最终保留的通道。
以chb01患者的数据为例,在通道选择过程中,精度与通道数量变化的关系如下:
在这里插入图片描述
从上图中可以看出,在脑电通道数量减少的过程中,模型对不同状态脑电特征 检测的准确率在不断变化中,而且与模型在原始的 18 个脑电通道上的测试结果相比 还有所提升。通道数量减少至 13 个的时候,acc 值达到了最高点,当通道数量减少至 11 个的时候,acc 值低于原始 18 个通道的 acc 值,通道选择算法会在此时停止并保 存通道数量最少的组合。

LightGBM模块代码

def LightGBM_function(X_train, y_train, X_test, y_test, boost_round):
    lgb_train = lgb.Dataset(X_train, y_train, feature_name = ch)
    lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)

    # 参数设置# 迭代次数
    early_stop_rounds = 100  # 验证数据若在early_stop_rounds轮中未提高,则提前停止

    params = {
        'boosting_type': 'gbdt',  # 设置提升类型
        'objective': 'binary',  # 目标函数
        'metric': 'acc,auc,binary_logloss',  # 评估函数
        'num_leaves': 8,  # 叶子节点数
        'learning_rate': 0.03,  # 学习速率
        'feature_fraction': 0.5,  # 建树的特征选择比例
        'bagging_fraction': 0.5,  # 建树的样本采样比例
        'bagging_freq': 3,  # k 意味着每 k 次迭代执行bagging
#         'num_class': 2
    }
    results = {}
    gbm = lgb.train(params,
                    lgb_train,
                    num_boost_round=boost_round,
                    valid_sets=(lgb_eval, lgb_train),
                    valid_names=('test', 'train'),
                    early_stopping_rounds=early_stop_rounds,
                    evals_result=results,
                   verbose_eval=False )

    # 模型预测
    y_pred = gbm.predict(X_test)
    AUC = gbm.best_score
#     ACC = accuracy_score(y_test, y_pred)
    print("AUC:{:.2f}".format(AUC['test']['auc']))
    # 模型评估
    lgb.plot_metric(results, metric='auc')
    plt.savefig("指标图/lgbm/"+file[:5]+"_auc.png", bbox_inches = 'tight')
#     lgb.plot_metric(results, metric='acc')
    lgb.plot_metric(results, metric='binary_logloss')
    plt.savefig("指标图/lgbm/"+file[:5]+"_loss.png", bbox_inches = 'tight')
    plt.show()
    return y_pred

LightGBM模型训练

model = LightGBM_function(d_train,l_train,d_test,l_test,100)

在这里插入图片描述
接下来缩减通道,直至保留的 EEG 通道数减少至本次通道缩 减后模型的准确率低于所有通道上模型的准确率,这样就可以得到最终保留的通道。这样便可以在不损失预测精度的前提下 有效缩减参与训练的 EEG 通道数量,从而达到减少计算量、降低硬件资源开销的目 的。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
提取 EEG 特征的 MATLAB 代码可以根据具体的特征提取方法和研究目的而有所不同。以下是一个示例代码,用于提取 EEG 信号的时域和频域特征: ```matlab % 假设你已经加载了 EEG 数据,并存储在名为 eeg_data 的变量中 % 定义采样率和数据点数 sampling_rate = 200; % 采样率(每秒采样点数) total_samples = size(eeg_data, 2); % 总数据点数 % 提取时域特征 mean_amplitude = mean(eeg_data, 2); % 平均振幅 std_amplitude = std(eeg_data, 0, 2); % 振幅标准差 max_amplitude = max(eeg_data, [], 2); % 最大振幅 min_amplitude = min(eeg_data, [], 2); % 最小振幅 % 提取频域特征 frequencies = linspace(0, sampling_rate/2, total_samples/2+1); % 频率范围 fft_data = fft(eeg_data, [], 2); % 快速傅里叶变换 power_spectrum = abs(fft_data(:, 1:total_samples/2+1)).^2; % 功率谱密度 % 计算频带特征 delta_band_power = sum(power_spectrum(:, frequencies <= 4), 2); % Delta 频带 theta_band_power = sum(power_spectrum(:, frequencies > 4 & frequencies <= 8), 2); % Theta 频带 alpha_band_power = sum(power_spectrum(:, frequencies > 8 & frequencies <= 13), 2); % Alpha 频带 beta_band_power = sum(power_spectrum(:, frequencies > 13 & frequencies <= 30), 2); % Beta 频带 % 可以继续提取其他频域特征,如频带比率、能量等 % 可以对提取的特征进行进一步的分析或处理 % 示例:绘制频域特征的柱状图 feature_names = {'Delta', 'Theta', 'Alpha', 'Beta'}; feature_values = [delta_band_power, theta_band_power, alpha_band_power, beta_band_power]; figure; bar(feature_names, feature_values); xlabel('Frequency Band'); ylabel('Power'); title('Power Spectrum Features'); ``` 请注意,以上代码仅提供了一个基本的示例,实际的特征提取方法可能因具体的研究目的和特征定义而有所不同。建议在实际应用中根据需求和研究领域的相关文献进行适当的修改和调整。此外,特征提取只是 EEG 数据分析的一部分,还可以结合其他方法和技术进行更全面的分析和解释。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arbitrary19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值