EEGデータ分類であなたの助けを求めます。matlabを使用したSWLDAによる脳波データ分類
私はEEGデータを分析しようとする大学院生です。
は、今私はMatlabの
を使用してSWLDAで分類するERPのスペルチェック(P300)に苦しんでいますたぶん私のコードで間違った何かがあります。
私はいくつかの記事を読んでいますが、詳細はあまり詳しく述べていません。
私のデータサイズは以下の通りです。
サイズ(ターゲット)= [300 1856] サイズ(非標的)= [998 1856]
行が試行の数を示し、列はスパン機能 を示す(Iは[64 29]データを延伸(ビジュアル用表現私は
私は
コードを以下に添付された非標的対対象を分類するためにMATLABでstepwisefit機能を使用)ROIを選択しなかった。
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
p.s.私のコードは現在非常に非効率的で、悪いかもしれません。
私の前提として、stepwisefitはすべてのステップで有意な係数を計算し、有効な列は残っています。
LDAではなく、バイナリ分類であっても、LDAと線形回帰は違いはありません。
は、しかし、結果はほとんど偶然..でした(インターネット上の他のバイナリデータのため、それが働いていた...)私は私が何か間違ったことをしたと思うし、あなたの助けが私を修正することができます。
ERPスペルラーの分類子を実装するためのヒントとヒントをお伝えします。
またはSWLDAをMatlabコードで実装する方法はありますか?