Как исправить мой код, чтобы правильно обнаруживать и удалять выбросы - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь обнаружить и удалить выбросы из набора данных (1372 строки, 4 столбца).

Я написал код для их поиска, но я не уверен, что это лучший способ. Хотя я пытался удалить их, но вместо того, чтобы быть удаленным, номер 32 заменяет их. Я не могу понять, почему.

% Find outliers
meanValue = mean(data_banknote_authentication(:,1:4));
absoluteDeviation = abs(data_banknote_authentication(:,1:4) - meanValue);
mad = median(absoluteDeviation);
sensitivityFactor = 3 % I am not sure if this is correct
thresholdValue = sensitivityFactor * mad;
outlierIndexes = abs(absoluteDeviation) > thresholdValue
outliers = data_banknote_authentication(:,1:4)(outlierIndexes);
nonOutliers = data_banknote_authentication(:,1:4)(~outlierIndexes);

% Remove outliers
for i=1:1372
  for k=1:4
    if (outlierIndexes(i,k) == 1)
      data_banknote_authentication(i,k) = ' ';
      %data_banknote_authentication(i,k) = " ";
    endif
  endfor
endfor

Я хочу удалить выбросы, но фактический результат заключается в том, что на их месте теперь число 32. Как я могу удалить их из набора данных?

...