【发布时间】:2017-12-13 11:03:52
【问题描述】:
我想在 EEG 数据分类方面寻求您的帮助。
我是一名试图分析脑电图数据的研究生。
现在我正在努力使用 Matlab 对带有 SWLDA 的 ERP 拼写器 (P300) 进行分类
也许我的代码有问题。
我已经阅读了几篇文章,但它们并没有涉及太多细节。
我的数据大小描述如下。
尺寸(目标)= [300 1856] 大小(非目标)= [998 1856]
行表示试验次数,列表示跨特征 (我拉伸了数据 [64 29](为了视觉表示我没有选择 ROI)
我在 Matlab 中使用 stepwisefit 函数对目标与非目标进行分类
代码附在下面。
ingredients = [targets; nontargets];
heat = [class_targets; class_nontargets]; % target: 1, non-target: -1
randomized_set = shuffle([ingredients heat]);
for k=1:10 % 10-fold cross validation
parition_factor = ceil(size(randomized_set,1) / 10);
cv_test_idx = (k-1)*parition_factor + 1:min(k * parition_factor, size(randomized_set,1));
total_idx = 1:size(randomized_set,1);
cv_train_idx = total_idx(~ismember(total_idx, cv_test_idx));
ingredients = randomized_set(cv_train_idx, 1:end-1);
heat = randomized_set(cv_train_idx, end);
[W,SE,PVAL,INMODEL,STATS,NEXTSTEP,HISTORY]= stepwisefit(ingredients, heat, 'penter', .1);
valid_id = find(INMODEL==1);
v_weights = W(valid_id)';
t_ingredients = randomized_set(cv_test_idx, 1:end-1);
t_heat = randomized_set(cv_test_idx, end); % true labels for test set
v_features = t_ingredients(:, valid_id);
v_weights = repmat(v_weights, size(v_features, 1), 1);
predictor = sum(v_weights .* v_features, 2);
m_result = predictor > 0; % class A: +1, B: 0
t_heat(t_heat==-1) = 0;
acc(k) = sum(m_result==t_heat) / length(m_result);
end
附言我的代码目前效率很低,可能很糟糕..
在我的假设中,stepwisefit 计算每一步的显着系数,并保留有效的列。
虽然不是LDA,但是对于二元分类,LDA和线性回归没有区别。
然而,结果几乎是随机的。(对于互联网上的其他二进制数据,它有效..)
我认为我做错了,您的帮助可以纠正我。
对于为 ERP 拼写器实施分类器的任何建议和技巧,我将不胜感激。
或者在 Matlab 代码中实现 SWLDA 的任何想法?
【问题讨论】:
-
我认为线性回归不同于线性分类。有几个原因:(1) 响应的预测值可能大于 1 或小于 0。(2) 响应的方差在所有变量中不是恒定的。不太可能使用与回归器相同的算法来训练分类器。
标签: matlab regression lda