首页 > 解决方案 > 如何修复我的代码以正确检测和删除异常值

问题描述

我正在尝试从数据集(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。如何从数据集中删除它们?

标签: octaveoutlierspattern-recognition

解决方案


推荐阅读