多模态生理信号情感识别:从特征工程到融合策略的完整实践指南

发布时间:2026/8/30 3:50:19
多模态生理信号情感识别:从特征工程到融合策略的完整实践指南 简介本资源面向人工智能、生物医学工程及心理学交叉领域的研究者与高年级本科生聚焦多模态生理信号驱动的情感识别任务解决单一模态识别精度低、泛化性差等实际问题。压缩包共39个文件含12张结果可视化图jpg/png、8个预处理后数据集pkl、6个原始生理信号MAT文件含s01–s06被试数据、2个核心模型脚本py、2个Jupyter实验笔记ipynb及完整README说明文档整体548.13MB其中multi_model.ipynb与attend_model.py实现CNN-LSTM融合建模preprocessed_data目录提供窗口化RNN/CNN适配数据集raw_data与picture子目录分别支撑数据溯源与性能分析。已有4116人学习下载资源覆盖从信号采集、同步预处理、HRV/EDA特征提取到多模型训练验证的全流程代码与技术报告附带loss/acc曲线、混淆矩阵及跨被试识别结果图可直接复现实验并用于课程设计、毕业课题或科研原型开发。1. 项目缘起从“昂贵算法”到“接地气”的实践最近在社区里看到不少讨论都在提“昂贵多模态优化算法”、“多模态大模型轻量化”这些词听起来很高大上但很多刚接触这个领域的朋友尤其是学生朋友第一反应往往是这玩意儿到底怎么落地代码从哪开始写报告又该怎么组织我自己当年做毕设、打比赛的时候也经历过这个阶段看着一堆“多模态融合”、“特征提取”的术语发懵网上找的代码要么跑不通要么就是“玩具”级别的demo离一个完整的、能讲清楚的项目相去甚远。所以我想借着“多模态生理信号情感识别”这个非常经典且具有代表性的课题从头到尾、掰开揉碎地讲一遍。这不仅仅是一个“附代码报告”的资源包我更想分享的是如何从一个想法构建出一个逻辑自洽、代码可复现、报告有深度的完整项目。你会发现所谓的“多模态”并不神秘生理信号处理也有章可循关键在于理解每个环节“为什么”要这么做以及如何把各个环节像拼图一样严丝合缝地组装起来。这个项目非常适合作为课程设计、毕业设计、学术竞赛如“互联网”、“挑战杯”的科技类作品甚至科研入门的蓝本。它涵盖了从数据处理、特征工程、模型构建、多模态融合到结果评估的全流程而且生理信号情感识别本身在心理健康监测、人机交互、疲劳驾驶预警等领域有明确的应用场景容易讲出故事和价值。接下来我会抛开那些空洞的概念直接进入实战环节带你一步步搭建起这个系统。2. 核心问题定义我们要识别什么用什么信号在撸起袖子写代码之前我们必须把问题边界划清楚。情感识别本身是个模糊的大概念是识别“喜怒哀乐”这种基本情绪还是“平静、焦虑、兴奋”这样的状态对于生理信号来说后者往往更可行、更有意义。2.1 情感模型的选取维度模型 vs. 离散模型情感计算领域主要有两种模型离散分类模型如Ekman的六种基本情绪高兴、悲伤、愤怒、恐惧、惊讶、厌恶和维度空间模型如效价-唤醒度二维模型。对于生理信号我强烈推荐从维度模型入手尤其是效价Valence和唤醒度Arousal这两个维度。为什么原因很实在生理信号的客观性心率加快、皮电升高这些信号更直接地对应了身体的唤醒程度Arousal高/低和情绪的积极/消极趋向Valence正/负而不是直接对应某个具体的情绪标签。你说“愤怒”和“恐惧”都可能伴随高唤醒和负效价单靠生理信号很难精准区分但区分“高唤醒负效价”和“低唤醒正效价”就相对可靠。数据的连续性维度模型输出的是连续值如-1到1的效价0到1的唤醒度这更符合回归任务的设定能挖掘更细腻的情感变化。而离散分类任务中类别不平衡、标签主观性强等问题会更突出。应用的普适性在疲劳监测中我们关心唤醒度是否持续走低在体验优化中我们关心效价是否保持正值。维度结果可以直接服务于这些高级应用。所以在我们的项目中目标就是构建一个模型输入多模态生理信号输出效价和唤醒度的连续预测值。这是一个典型的多输出回归问题。2.2 多模态生理信号选型为什么是这几种“多模态”不是信号越多越好而是要选择互补性强、易于采集、且对情感变化敏感的信号。结合公开数据集和实际可行性我建议聚焦于以下四种最经典、数据质量相对有保障的信号心电图ECG核心是心率HR和心率变异性HRV。情绪激动高唤醒时交感神经兴奋心率通常加快HRV的某些频域指标如LF/HF比值会发生变化。它是评估情绪唤醒度和压力水平的金标准之一。皮肤电活动EDA/GSR直接反映交感神经兴奋度是唤醒度的灵敏指示器。情绪波动尤其是紧张、惊讶、兴奋时皮肤电导水平SCL会上升并可能出现皮肤电导反应SCR。它几乎对任何唤醒度变化都有反应。肌电图EMG这里主要指面部肌电如皱眉肌Corrugator和颧大肌Zygomaticus。研究表明负效价情绪如厌恶会激活皱眉肌正效价情绪如愉悦会激活颧大肌。它提供了效价维度的重要线索。呼吸RSP情绪会影响呼吸频率和模式。例如悲伤时呼吸可能变慢变深焦虑时可能变快变浅。呼吸信号可以作为心率和皮肤电的有效补充提高模型的鲁棒性。注意在实际项目中你可能会遇到光电体积描记图PPG它可以通过智能手表等设备方便地获取心率信息可以作为ECG的替代或补充。但PPG更容易受运动伪影干扰处理时需要格外小心。选定这四种信号后我们的多模态数据流就清晰了四路并行的时序信号。接下来就是如何获取和处理这些数据。3. 数据获取与预处理从原始信号到干净特征巧妇难为无米之炊。对于学生项目自己采集高质量、有标签的生理信号数据成本极高。因此使用公开数据集是唯一现实且推荐的选择。3.1 数据集推荐与获取这里我强烈推荐两个标杆级的、带情感维度标签的多模态生理信号数据集DEAP Dataset这几乎是情感识别领域的“Hello World”数据集。它包含32名被试观看40段音乐视频时的EEG脑电、ECG、GSR、RSP、EMG等信号以及被试自评的效价、唤醒度等维度标签。数据规范研究充分复现论文极多。获取通常在官网或Kaggle上可以找到。我们的用途主要使用其ECG, GSR, RSP, EMG信号和V/A标签。MAHNOB-HCI Dataset另一个大型多模态数据集被试观看情感视频片段记录ECG、EDA、呼吸、面部视频等并提供了情感维度标签。获取需要向主办方申请但流程通常比较规范。我们的用途与DEAP类似可作为补充或对比验证。实操第一步下载并解压DEAP数据。你会得到.dat文件Python可用pickle或scipy.io.loadmat读取或预处理好的版本。数据通常以字典形式存储键名如data生理信号,labels情感标签。3.2 预处理流水线详解每一步的“为什么”原始生理信号充满了噪声工频干扰、运动伪影、基线漂移等必须经过清洗才能用于特征提取。下面是一个标准的预处理流程我会解释每个步骤的必要性。假设我们读取了某个被试的一段ECG信号ecg_raw采样频率为128Hz。import numpy as np import scipy.signal as signal import matplotlib.pyplot as plt # 1. 降采样 (如果需要) # DEAP数据采样率是128Hz对于心率和HRV分析通常够用。如果原始采样率过高如512Hz可降采样以减少计算量。 # target_fs 128 # if original_fs target_fs: # num_samples int(len(ecg_raw) * target_fs / original_fs) # ecg_raw signal.resample(ecg_raw, num_samples) # 2. 带通滤波去除高频噪声和低频漂移 # ECG有效成分一般在0.5Hz - 40Hz之间。 lowcut 0.5 highcut 40.0 nyquist 0.5 * 128 # 奈奎斯特频率 low lowcut / nyquist high highcut / nyquist b, a signal.butter(4, [low, high], btypeband) # 4阶巴特沃斯带通滤波器 ecg_filtered signal.filtfilt(b, a, ecg_raw) # 使用filtfilt实现零相位滤波 # 3. 工频陷波去除50Hz或60Hz电源干扰 notch_freq 50.0 Q 30.0 # 品质因数控制陷波宽度 b, a signal.iirnotch(notch_freq, Q, 128) ecg_clean signal.filtfilt(b, a, ecg_filtered)为什么是这些参数巴特沃斯滤波器通带内频率响应平坦是我们最常用的。阶数选择4在滤波效果和计算复杂度/相位失真间取得平衡。阶数越高截止越陡但可能引入振铃效应。filtfilt的正向反向滤波消除了相位延迟至关重要。陷波滤波器实验室环境采集的数据50Hz干扰非常常见。Q30是一个经验值能有效滤除窄带干扰而不过度影响邻近频率。对于EDA信号预处理重点不同低通滤波EDA变化缓慢通常用0-5Hz的低通滤波保留主要成分去除高频肌电等噪声。平滑有时会使用移动平均或Savitzky-Golay滤波器进一步平滑使SCR峰值更易检测。对于RSP信号可能需要带通滤波例如0.1-0.5Hz保留正常的呼吸频率范围。去除基线由于传感器位移呼吸信号常有基线漂移可用高通滤波或减去滑动平均来纠正。预处理的核心思想根据每种信号的生理意义和噪声特性量身定制滤波策略。永远记住垃圾进垃圾出Garbage in, garbage out。预处理阶段多花一小时可能让模型性能提升好几个点。4. 特征工程从波形中抽取情感“指纹”预处理后我们得到了干净的时序信号但直接扔进模型如LSTM效果往往不好且计算量大。特征工程的目的是将长长的序列压缩成一组有区分度的统计量即情感的“指纹”。4.1 时域、频域、非线性特征全解析我们需要为每一段信号例如对应一个视频片段的60秒数据计算一组特征。下面以一段60秒的ECG信号为例讲解如何计算HRV特征。def extract_hrv_features(ecg_signal, fs): 从ECG信号中提取心率变异性特征。 输入预处理后的ECG信号采样频率fs。 输出包含时域、频域HRV特征的字典。 features {} # --- 第一步R峰检测获取RR间期序列 --- # 使用经典的Pan-Tompkins算法或简单的峰值检测 # 这里使用scipy的find_peaks进行简化演示 peaks, _ signal.find_peaks(ecg_signal, distancefs*0.6) # 最小间隔0.6秒避免误检 rr_intervals np.diff(peaks) / fs * 1000.0 # 单位转换为毫秒 if len(rr_intervals) 10: # 如果R峰太少返回空特征 return None # --- 第二步计算时域特征 --- features[hr_mean] 60000.0 / np.mean(rr_intervals) # 平均心率 (bpm) features[hr_std] np.std(60000.0 / rr_intervals) # 心率标准差 features[rmssd] np.sqrt(np.mean(np.diff(rr_intervals) ** 2)) # RMSSD反映副交感神经活性 features[nn50] np.sum(np.abs(np.diff(rr_intervals)) 50) # NN50相邻RR间期差50ms的个数 features[pnn50] features[nn50] / len(rr_intervals) * 100 # pNN50NN50的百分比 # --- 第三步计算频域特征需要等间距插值--- # 将非均匀的RR间期序列插值为均匀时间序列 t_peaks peaks[:-1] / fs # R峰对应的时间点秒 f_interp interp1d(t_peaks, rr_intervals, kindcubic) # 立方插值 t_interp np.arange(t_peaks[0], t_peaks[-1], 1/fs) # 均匀时间轴 rr_interp f_interp(t_interp) # 去除线性趋势 rr_detrended signal.detrend(rr_interp) # 计算功率谱密度 (PSD) freqs, psd signal.welch(rr_detrended, fsfs, npersegmin(256, len(rr_detrended))) # 定义频段边界 (Hz) vlf_band (0.003, 0.04) lf_band (0.04, 0.15) hf_band (0.15, 0.4) # 计算各频段功率 idx_vlf np.logical_and(freqs vlf_band[0], freqs vlf_band[1]) idx_lf np.logical_and(freqs lf_band[0], freqs lf_band[1]) idx_hf np.logical_and(freqs hf_band[0], freqs hf_band[1]) vlf_power np.trapz(psd[idx_vlf], freqs[idx_vlf]) lf_power np.trapz(psd[idx_lf], freqs[idx_lf]) hf_power np.trapz(psd[idx_hf], freqs[idx_hf]) total_power vlf_power lf_power hf_power features[lf_power] lf_power features[hf_power] hf_power features[lf_hf_ratio] lf_power / hf_power if hf_power 0 else 0 features[lf_nu] lf_power / (lf_power hf_power) * 100 # LF功率归一化 features[hf_nu] hf_power / (lf_power hf_power) * 100 # HF功率归一化 # --- 第四步非线性特征 (示例样本熵) --- # 样本熵计算较复杂这里示意性引入 # features[sampen] compute_sample_entropy(rr_intervals, m2, r0.2*np.std(rr_intervals)) return features特征选择与解释时域特征RMSSD和pNN50是评估副交感神经放松相关活性的黄金指标值越高通常意味着更放松、压力更低。频域特征LF功率与交感神经和副交感神经的共同调节有关HF功率主要反映副交感神经迷走神经活性。LF/HF比值常被有争议地用作交感-迷走平衡的指标比值升高可能指向压力或高唤醒状态。重要提示HRV分析对R峰检测的准确性极其敏感。一个错误的R峰会导致一系列特征计算错误。因此必须可视化检查R峰检测结果或使用更鲁棒的检测算法如neurokit2库。对于EDA我们关注皮肤电导水平SCL信号的均值或中值反映 tonic level紧张水平。皮肤电导反应SCR通过峰值检测算法找出信号中的“尖峰”计算其数量、幅度、上升时间等。SCR的频率和幅度与情绪事件引起的唤醒度波动直接相关。对于EMG我们通常计算均方根RMS肌肉活动强度的经典指标。积分肌电值iEMG一段时间内信号的绝对面积。频域中值频率MDF肌肉疲劳时频谱会向低频移动。对于RSP我们计算呼吸频率BR通过检测吸气峰值计算。吸气时间、呼气时间、吸呼比。呼吸幅度变异。最终对于一个数据样本一段视频我们将四种信号的特征拼接成一个长特征向量作为机器学习模型的输入。4.2 特征标准化与重要性分析不同特征量纲差异巨大心率是几十功率可能是几千必须进行标准化。常用StandardScaler减去均值除以标准差使其均值为0方差为1。from sklearn.preprocessing import StandardScaler # 假设X_train是训练集特征矩阵形状为 (n_samples, n_features) scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) # 对测试集使用相同的scaler进行变换 X_test_scaled scaler.transform(X_test)标准化后可以用随机森林或XGBoost等模型进行训练并查看特征重要性这本身就是报告中的一个亮点部分。你可以分析出对于预测效价和唤醒度究竟是HRV的某个指标、EDA的SCR数量还是EMG的RMS值贡献最大。5. 模型构建与多模态融合策略与代码实现特征准备好后就进入了核心的建模环节。我们面临两个关键决策1. 用什么模型 2. 如何融合多模态特征5.1 模型选型从传统机器学习到深度学习对于入门我建议建立一个基线模型-对比模型-进阶模型的递进式实验框架。基线模型Baseline经典机器学习模型支持向量回归SVR、随机森林回归RFR、梯度提升回归GBR。优点训练快可解释性强特征重要性在小数据集上不易过拟合。代码示例SVRfrom sklearn.svm import SVR from sklearn.multioutput import MultiOutputRegressor from sklearn.model_selection import GridSearchCV # 我们有两个输出Valence, Arousal使用MultiOutputRegressor包装 svr SVR(kernelrbf) multi_svr MultiOutputRegressor(svr) # 简单的超参数搜索 param_grid { estimator__C: [0.1, 1, 10], estimator__gamma: [scale, auto, 0.01, 0.1] } grid_search GridSearchCV(multi_svr, param_grid, cv5, scoringneg_mean_squared_error, n_jobs-1) grid_search.fit(X_train_scaled, y_train) # y_train形状 (n_samples, 2) best_model grid_search.best_estimator_对比模型必须做深度学习-全连接网络模型多层感知机MLP。这是检验特征工程是否有效的试金石。如果精心设计的特征还不如一个简单MLP那可能说明特征还有优化空间。代码框架PyTorchimport torch import torch.nn as nn import torch.optim as optim class MLP(nn.Module): def __init__(self, input_dim): super(MLP, self).__init__() self.network nn.Sequential( nn.Linear(input_dim, 128), nn.ReLU(), nn.Dropout(0.3), nn.Linear(128, 64), nn.ReLU(), nn.Dropout(0.3), nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 2) # 输出效价和唤醒度 ) def forward(self, x): return self.network(x) # 训练循环... criterion nn.MSELoss() # 回归任务用均方误差损失 optimizer optim.Adam(model.parameters(), lr1e-3)进阶模型亮点基于时序的深度学习模型LSTM、GRU或1D-CNN。这类模型可以直接处理原始信号或分段信号自动学习时空特征理论上能捕捉更动态的情感变化模式。输入可以将原始信号分割成固定长度如5秒的片段或者使用预处理后的中等长度序列。代码框架LSTMclass LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, num_layers): super(LSTMModel, self).__init__() self.lstm nn.LSTM(input_size, hidden_size, num_layers, batch_firstTrue, dropout0.3) self.fc nn.Linear(hidden_size, 2) def forward(self, x): # x形状: (batch_size, seq_len, input_size) 例如 (32, 60, 4) 表示4种信号 lstm_out, _ self.lstm(x) # 取最后一个时间步的输出或对所有时间步输出做平均/池化 last_output lstm_out[:, -1, :] output self.fc(last_output) return output5.2 多模态融合三种主流策略的抉择这是项目的核心创新点之一。融合策略决定了不同模态信息如何交互。特征级融合早期融合做法在输入模型之前直接将ECG、EDA、EMG、RSP提取的特征向量拼接成一个超级特征向量。优点简单直接模型可以学习到所有特征之间的任意交互关系。缺点特征维度高容易过拟合忽略了不同模态数据本身的特性如时序性。适用我们的基线MLP和传统机器学习模型通常采用这种方式。决策级融合晚期融合做法为每种模态单独训练一个模型子模型得到各自的效价/唤醒度预测值最后用一个元模型如线性加权、另一个回归器或简单规则如平均融合这些预测值。优点灵活子模型可以针对不同模态特点专门优化如ECG用LSTMEDA用SVR。某个模态数据缺失时系统仍可工作。缺点忽略了模态间的早期关联信息。代码示意# 假设我们有三个模态的预测器model_ecg, model_eda, model_emg pred_ecg model_ecg(X_ecg) pred_eda model_eda(X_eda) pred_emg model_emg(X_emg) # 决策级融合加权平均 weights {ecg: 0.4, eda: 0.4, emg: 0.2} # 权重可学习或凭经验设定 final_pred weights[ecg]*pred_ecg weights[eda]*pred_eda weights[emg]*pred_emg模型级融合中期融合/混合融合做法为不同模态设计不同的特征提取子网络如ECG用1D-CNNEDA用LSTM在网络的中间层而非输入或输出将它们的特征表示进行融合拼接、相加、注意力加权等然后接一个共同的决策层。优点能学习模态间的复杂非线性交互是目前研究的主流性能通常最好。缺点模型复杂需要更多数据训练难度大。代码框架注意力融合示例class MultimodalAttentionFusion(nn.Module): def __init__(self, ecg_feat_dim, eda_feat_dim, emg_feat_dim): super().__init__() # 各模态的特征提取子网络 self.ecg_encoder ECGEncoder(ecg_feat_dim) self.eda_encoder EDAEncoder(eda_feat_dim) self.emg_encoder EMGEncoder(emg_feat_dim) fusion_dim ecg_feat_dim eda_feat_dim emg_feat_dim # 注意力层学习每个模态特征的权重 self.attention nn.Sequential( nn.Linear(fusion_dim, 64), nn.Tanh(), nn.Linear(64, 3), # 为3个模态生成权重 nn.Softmax(dim-1) ) self.fc nn.Linear(fusion_dim, 2) def forward(self, ecg, eda, emg): feat_ecg self.ecg_encoder(ecg) feat_eda self.eda_encoder(eda) feat_emg self.emg_encoder(emg) # 拼接特征 combined torch.cat([feat_ecg, feat_eda, feat_emg], dim-1) # 计算注意力权重 attn_weights self.attention(combined) # 形状: (batch_size, 3) # 加权融合 (这里简化处理实际可按权重对特征进行加权求和) # 更精细的做法是为每个模态特征分别乘权重后再拼接 weighted_feat attn_weights[:, 0:1] * feat_ecg attn_weights[:, 1:2] * feat_eda attn_weights[:, 2:3] * feat_emg output self.fc(weighted_feat) return output我的建议在报告中你应该至少实现并对比特征级融合和一种更高级的融合策略如决策级加权或简单的模型级拼接。这能立刻让你的工作超越简单的“跑通代码”体现出对问题的深入思考。6. 实验、评估与报告撰写让项目“立得住”模型跑起来只是第一步严谨的实验设计和评估才能证明工作的价值。6.1 实验设置与评估指标数据划分务必使用被试独立的划分方式Subject-Independent Split。例如将DEAP数据集中前24名被试的数据作为训练集后8名作为测试集。绝对禁止随机打乱所有样本再划分那会导致模型“记住”了特定被试的生理模式造成性能虚高毫无泛化能力。这是学生项目中最常见的错误之一。评估指标对于回归任务最常用的是均方根误差RMSE衡量预测值与真实值的平均偏差单位与标签相同非常直观。平均绝对误差MAE对异常值不如RMSE敏感。决定系数R² Score表示模型对数据方差的解释程度越接近1越好。皮尔逊相关系数PCC衡量预测值与真实值的线性相关程度在情感识别中很常用。from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score from scipy.stats import pearsonr def evaluate_regression(y_true, y_pred): rmse np.sqrt(mean_squared_error(y_true, y_pred, multioutputraw_values)) mae mean_absolute_error(y_true, y_pred, multioutputraw_values) r2 r2_score(y_true, y_pred, multioutputraw_values) pcc_valence, _ pearsonr(y_true[:, 0], y_pred[:, 0]) pcc_arousal, _ pearsonr(y_true[:, 1], y_pred[:, 1]) print(fValence - RMSE: {rmse[0]:.3f}, MAE: {mae[0]:.3f}, R²: {r2[0]:.3f}, PCC: {pcc_valence:.3f}) print(fArousal - RMSE: {rmse[1]:.3f}, MAE: {mae[1]:.3f}, R²: {r2[1]:.3f}, PCC: {pcc_arousal:.3f}) return {RMSE: rmse, MAE: mae, R2: r2, PCC: [pcc_valence, pcc_arousal]}6.2 结果分析与可视化数字是冰冷的图表才有说服力。你的报告里必须包含以下可视化内容模型性能对比表格用表格清晰列出SVR、MLP、LSTM等不同模型在特征级融合和你的高级融合策略下在测试集上的RMSE、MAE、PCC等指标。预测值与真实值散点图分别绘制效价和唤醒度的预测值 vs. 真实值散点图并画出yx的参考线。点越靠近对角线预测越准。可以直观看出模型在哪个区域如高效价高唤醒预测得好或差。特征重要性柱状图如果用了树模型画出Top-10或Top-15的特征重要性排序并解释哪些生理指标最关键。模态消融实验展示仅使用ECG、仅使用EDA、使用ECGEDA等不同模态组合时的性能。用柱状图表示这能强有力地证明多模态的必要性。例如你可能会发现单模态时PCC可能只有0.3-0.4而多模态融合后能达到0.6以上。训练损失/验证损失曲线对于深度学习模型展示训练过程是否收敛是否有过拟合。6.3 报告撰写核心要点报告或论文不是代码的罗列而是讲一个逻辑完整的故事。结构可以如下摘要用200-300字浓缩整个工作背景、问题、方法提出了一种基于XX融合的多模态模型、核心结果在DEAP数据集上效价预测PCC达到X唤醒度达到Y、结论意义。引言从情感计算的应用价值如健康、人机交互切入指出单模态的局限性引出多模态生理信号的优势最后明确本文工作。相关工作综述情感识别、生理信号处理、多模态融合的经典与最新方法要点评其优缺点为你的方法做铺垫。方法这是核心。按数据预处理 - 特征提取 - 模型架构 - 融合策略的逻辑线清晰阐述。配以流程图如数据流图、模型结构图。公式和关键代码片段如特征计算公式、融合公式可以放在这里。实验详细介绍数据集、实验设置被试独立划分、评估指标、对比模型Baseline。用表格和图表展示结果并进行分析讨论如“我们的融合策略在唤醒度预测上提升显著可能是因为...”。结论与展望总结主要贡献坦承局限性如数据量小、个体差异大提出未来可改进的方向如引入注意力机制、使用迁移学习、探索更多模态等。参考文献规范引用DEAP数据集原文、你参考的算法论文、使用的工具库如scikit-learn, PyTorch等。最后将整理好的代码带详细注释、预处理好的数据样本、模型权重、以及生成所有图表的脚本打包。一个优秀的项目仓库应该让他人能够通过README.md和run.py轻松复现你的主要结果。本文还有配套的精品资源点击获取