Как исключить данные с нулевой дисперсией в реализации Matlab линейного дискриминантного анализа

Я использую Matlab для классификации данных с использованием LDA.

  mdl = fitcdiscr(dbimgs1,indx,'DiscrimType','linear');
  C=predict(mdl,testimgs1);

Я получаю следующую ошибку:

Предиктор x741 имеет нулевую дисперсию. Либо исключите этот предиктор, либо установите для параметра «discrimType» значение «pseudoLinear» или «diagLinear».

Я не хочу использовать 'pseudoLinear' или 'diagLinear', так как это снижает производительность. Как я могу исключить нулевой предиктор?


person Community    schedule 26.04.2016    source источник


Ответы (1)


  delete_id=[];
  for id_var_chk=1:size(dbimgs1,2)
      if(var(dbimgs1(:,id_var_chk))<1)
             delete_id=[delete_id,id_var_chk]
      end
  end

Цикл проверяет дисперсию каждого столбца. Затем значения с низкой дисперсией удаляются:

 dbimgs1(:,delete_id_1(i))=[];
person Community    schedule 02.05.2016