基于 Matlab含 EEGLab / BioSig / Statistics Toolbox。一、EEG SVM 标准流程原始 EEG ↓ 预处理滤波 / 去伪迹 ↓ 分段 Epoch试次 ↓ 特征提取CSP / 功率谱 / 时域 ↓ 标准化Z-score ↓ SVM 训练 / 测试 ↓ 准确率 / 混淆矩阵 / KappaSVM 对特征尺度极其敏感一定要标准化二、最简可用示例Matlab二分类 SVM线性核%% 假设% X: [N_trials × N_features]% y: [N_trials × 1] (-1 / 1)% 标准化Xzscore(X);% 训练 SVMsvmModelfitcsvm(...X,y,...KernelFunction,linear,...BoxConstraint,1,...Standardize,false);% 已手动标准化% 预测y_predpredict(svmModel,X_test);% 准确率accmean(y_predy_test);fprintf(Accuracy %.2f%%\n,acc*100);三、BCI 黄金组合CSP SVM运动想象MIEEG 的标准解法1、CSP 特征提取Matlab%% 输入% X1: [通道 × 时间 × 试次] 类别1% X2: [通道 × 时间 × 试次] 类别2[cspW,~]csp(X1,X2,4);% 取前4个 后4个成分%% 提取特征featureszeros(size(X1,3)size(X2,3),8);idx1;fori1:size(X1,3)projcspW*squeeze(X1(:,:,i));features(idx,:)log(var(proj));idxidx1;endfori1:size(X2,3)projcspW*squeeze(X2(:,:,i));features(idx,:)log(var(proj));idxidx1;end2、CSP SVM 训练featureszscore(features);svmModelfitcsvm(...features,labels,...KernelFunction,linear,...BoxConstraint,0.5);y_predpredict(svmModel,zscore(test_features));accmean(y_predtest_labels);BCI Competition IV 2a 数据集75%~85%四、多分类 SVMMI 四类svmModelfitcecoc(...features,labels,...Learners,svm,...Coding,onevsone);y_predpredict(svmModel,test_features);五、EEG 常用特征频带能量fs250;band[813];% Alpha[f,pxx]pwelch(eeg,[],[],[],fs);idxfband(1)fband(2);featurelog(sum(pxx(idx)));Hjorth 参数dxdiff(eeg);ddxdiff(dx);activityvar(eeg);mobilitysqrt(var(dx)/var(eeg));complexitymobility/dx;参考代码 用于脑电信号分类的SVM分类器www.youwenfan.com/contentcsu/63400.html六、交叉验证cvcvpartition(labels,KFold,5);acczeros(cv.NumTestSets,1);fori1:cv.NumTestSets trainIdxtraining(cv,i);testIdxtest(cv,i);svmfitcsvm(features(trainIdx,:),labels(trainIdx),...KernelFunction,linear);predpredict(svm,features(testIdx,:));acc(i)mean(predlabels(testIdx));endfprintf(5-fold CV Accuracy: %.2f ± %.2f\n,...mean(acc)*100,std(acc)*100);七、SVM 参数调优optsstruct(...OptimizeHyperparameters,auto,...HyperparameterOptimizationOptions,...struct(AcquisitionFunctionName,expected-improvement));svmfitcsvm(features,labels,KernelFunction,rbf,opts);八、EEG 预处理推荐eeglab EEGpop_loadset(filename.set);EEGpop_chanedit(EEG);EEGpop_ica(EEG);EEGpop_epoch(EEG,{stim},[-13]);