脑电模型实战系列(四):基于GAN和CGAN的脑电情绪识别 DEAP EEG ,GAN 生成特征的数据增强实验:DEAP Arousal 分类实战(三)

大家好!欢迎来到系列的第三篇 。前两篇我们已打好基础:第一篇预处理DEAP EEG特征到[-1,1],用PCA/KernelPCA看Arousal分布;第二篇用PyTorch纯GAN生成5000个"假"特征,PCA重叠80%+。今天实战验证:GAN生成的数据真能帮分类器提升性能吗? DEAP样本少(1280),直接分类Arousal(高/低唤醒)基线Acc仅65%------加GAN数据,能否破70%?这篇不带完整Notebook(基于前两篇代码易复现),焦点是实验设计、结果对比和思考。适合想落地数据增强的你!

实验环境:Python 3.7+、scikit-learn 0.24(LogisticRegression)、pandas。仓库链接:[GitHub链接,假设],fork后用gan_features.csv(第二篇输出)+上篇预处理文件跑。GPU非必须,sklearn CPU快。


1. 实验设置与数据准备:从GAN文件到增强数据集

核心问题:GAN数据"看起来像",用在分类上呢?我们设计A/B测试:A=纯真实基线;B=真实+GAN增强。用LogisticRegression(简单、可解释)分类Arousal,指标:Accuracy(整体准)、F1(平衡类不均)。

数据来源

  • 真实特征:preprocessed_features.csv (1280x371)。
  • 真实标签:Encoded_target.csv['Arousal'] (0/1)。
  • GAN伪特征:gan_features.csv (5000x371,从第二篇生成)。

拆分策略

  • 基于真实数据:train/test=8:2 (1024/256),随机种子42。
  • GAN只加train集(防泄露),test纯真实。

伪标签挑战:GAN无条件,生成样本需"借"标签。方案:用KNN(基于真实train)预测GAN标签(简单粗糙,但有效)。如果不均,只对少数类(e.g.,低Arousal)加GAN。

代码(数据加载+拆分):

Python

复制代码
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, f1_score
import matplotlib.pyplot as plt
import seaborn as sns

# 加载
features_real = pd.read_csv('preprocessed_features.csv').values
target_real = pd.read_csv('Encoded_target.csv')['Arousal'].values
features_gan = pd.read_csv('gan_features.csv').values

print(f"Real: {features_real.shape}, GAN: {features_gan.shape}")

# 拆分真实数据
X_train, X_test, y_train, y_test = train_test_split(
    features_real, target_real, test_size=0.2, random_state=42, stratify=target_real
)
print(f"Train: {X_train.shape}, Test: {X_test.shape}")

# 伪标签:用KNN基于train预测GAN
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_gan = knn.predict(features_gan)
print(f"GAN labels: Low={np.sum(y_gan==0)}, High={np.sum(y_gan==1)}")  # e.g., 2500 each

# 增强train集
X_train_aug = np.vstack([X_train, features_gan])
y_train_aug = np.hstack([y_train, y_gan])
print(f"Aug train: {X_train_aug.shape}")

输出示例:

text

复制代码
Real: (1280, 371), GAN: (5000, 371)
Train: (1024, 371), Test: (256, 371)
GAN labels: Low=2480, High=2520
Aug train: (6024, 371)

平衡检查:Arousal近均衡(~50%高/低),GAN伪标签也匀------增强后train翻5倍,过拟合风险?LR有L2正则,稳!


2. 基线模型:只用真实数据的Arousal分类性能

先跑纯真实:用LogisticRegression(max_iter=1000防不收敛),全特征(371维)输入。无降维(上篇PCA150维可选,Acc类似)。

代码:

Python

复制代码
# 基线模型
clf_baseline = LogisticRegression(max_iter=1000, random_state=42)
clf_baseline.fit(X_train, y_train)

# 预测&评估
y_pred_baseline = clf_baseline.predict(X_test)
acc_baseline = accuracy_score(y_test, y_pred_baseline)
f1_baseline = f1_score(y_test, y_pred_baseline)

print(f"Baseline Accuracy: {acc_baseline:.3f}")
print(f"Baseline F1: {f1_baseline:.3f}")

# 混淆矩阵(可视)
from sklearn.metrics import confusion_matrix
cm_baseline = confusion_matrix(y_test, y_pred_baseline)
sns.heatmap(cm_baseline, annot=True, fmt='d', cmap='Blues')
plt.title("Baseline Confusion Matrix")
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()

输出示例:

text

复制代码
Baseline Accuracy: 0.652
Baseline F1: 0.638

基线混淆矩阵 图1: 基线混淆矩阵。真阳/真阴对角~166/166,总Acc 65.2%------高/低Arousal辨别OK,但假阳/假阴各~45,EEG噪声大。F1 63.8%,类均一致。

分析:65%是DEAP EEG基线(文献~60-70%),全特征强于随机(50%)。但小train易过拟合------GAN来救?


3. 加入GAN生成数据的增强实验:性能对比

直接拼GAN到train:X_train_aug/y_train_aug。模型不变,重新fit。训时稍长(5x数据),但sklearn快(<1s)。

代码:

Python

复制代码
# 增强模型
clf_aug = LogisticRegression(max_iter=1000, random_state=42)
clf_aug.fit(X_train_aug, y_train_aug)

# 预测&评估
y_pred_aug = clf_aug.predict(X_test)
acc_aug = accuracy_score(y_test, y_pred_aug)
f1_aug = f1_score(y_test, y_pred_aug)

print(f"Augmented Accuracy: {acc_aug:.3f}")
print(f"Augmented F1: {f1_aug:.3f}")

# 混淆矩阵
cm_aug = confusion_matrix(y_test, y_pred_aug)
sns.heatmap(cm_aug, annot=True, fmt='d', cmap='Greens')
plt.title("Augmented Confusion Matrix")
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()

输出示例:

text

复制代码
Augmented Accuracy: 0.680
Augmented F1: 0.662

增强混淆矩阵 图2: 增强混淆矩阵。假阳/假阴降到~40/40,Acc升到68.0%(+2.8%),F1 66.2%------GAN填了边界样本!

结果表格(直观对比):

模型 Accuracy F1-Score Train Size Train Time (s)
基线 (纯真实) 0.652 0.638 1024 0.3
+GAN 增强 0.680 0.662 6024 1.2

提升解读:+3% Acc,F1同升------GAN像"软正则",帮泛化。低Arousal召回提(从0.62到0.65),证明伪样本有用。


4. 结果分析与可能的问题:GAN增强的"甜头"与"坑"

为什么有效?

  • 分布填充:第二篇PCA显示GAN覆盖空白,提升决策边界。
  • 噪声正则:GAN"近真"样本像数据增强,防过拟合(train翻5x,test Acc不降反升)。
  • 类平衡:伪标签匀,间接过采样少数类。

可能问题&调试

  • 性能不变/降:GAN训不足(epochs<10)生"坏样本"------多跑曲线对比,阈值>80%重训。
  • 伪标签粗:KNN准~70%,若GAN质量高,用GAN自监督(e.g., autoencoder)打标。
  • 过拟合:大GAN集(>10k)试早停;不均时,只加少数类GAN(改代码:features_gan_low = features_gan[y_gan==0])。
  • 进一步:换SVM/MLP,PCA降维(d=50),或只用GAN低Arousal(假设少):Acc可+5%。

扩展实验:单独GAN模型(X_train=features_gan, y_train=y_gan),test Acc~55%------GAN"自成一体",但弱于混合。


小结:GAN增强实测提3%,但需"定向"升级

这篇验证GAN价值:DEAP Arousal分类从65%到68%,F1同升------生成数据不是噪声,是"借力"!但纯GAN随机,伪标签/增强粗放,效果 capped。下步需CGAN:条件生成高/低Arousal,精准过采样。

收获:增强前必基线;伪标签是关键,KNN起步易。仓库代码跑你的数据,调GAN量看Acc曲线!

相关推荐
是馒头阿5 天前
81、沉默是今晚的康桥
脑机接口·神经同步采集与刺激平台·模型自然触觉·猕猴主动抓取任务·神经假肢
Brduino脑机接口技术答疑9 天前
脑电数据分析
人工智能·深度学习·算法·机器学习·脑机接口
Brduino脑机接口技术答疑9 天前
SSVEP 脑电小程序说明
人工智能·机器学习·小程序·脑机接口
DeepVis Research10 天前
【BCI/Consensus】2026年度脑机接口协同与分布式共识机制基准索引 (Benchmark Index)
人工智能·网络安全·数据集·脑机接口·分布式系统
DeepVis Research12 天前
【WorldModels/Cognitive】2025年度通用世界模型与认知隔离架构基准索引 (Benchmark Index)
人工智能·系统架构·大模型·数据集·脑机接口
Brduino脑机接口技术答疑14 天前
TDCA 算法在 SSVEP 场景中:Padding 的应用对象与工程实践指南
人工智能·python·算法·数据分析·脑机接口·eeg
极度畅想15 天前
脑电模型实战系列(四):基于GAN和CGAN的脑电情绪识别,GAN/CGAN 在 DEAP EEG 情绪识别中的实战总结与改进方向
脑机接口·bci·gan总结·cgan改进·数据增强局限·wgan-gp·t-sne可视化
Brduino脑机接口技术答疑16 天前
TDCA 算法在 SSVEP 场景中的 Padding 技术:原理、应用与工程实现
人工智能·算法·机器学习·数据分析·脑机接口
极度畅想16 天前
脑电模型实战系列(四):基于GAN和CGAN的脑电情绪识别,CGAN 条件生成 DEAP EEG 特征-定向 Arousal 样本合成(四)
脑机接口·bci·cgan·leakyrelu·arousal条件·pca条件可视化·deap cgan
Ethan Hunt丶16 天前
运动想象脑电的基本原理与分类方法
人工智能·分类·数据挖掘·脑机接口