2013-05-10 2 views

ответ

5

In this work paper (первая ссылка), у вас есть полнотекстовая реализация алгоритма outlier с WEKA.

Кроме того, алгоритм, используемый в

предложено в работе «A Unified Approach to Detecting Spatial Outliers», С. Шекхар и др. В документе показаны несколько тестов обнаружения пространственного выброса. Например, облако варограмм отображает точки данных, относящиеся к отношениям . Для каждой пары местоположений квадратный корень абсолютной разницы между значениями атрибутов в точках местоположения по сравнению с изображен на эвклидовом расстоянии между местоположениями. В наборах данных , демонстрирующих сильную пространственную зависимость, дисперсия в атрибутах различий на множестве данных с сильной пространственной зависимостью, отклонение в разнице атрибутов будет увеличиваться с увеличением расстояния между местоположениями . Места, близкие друг к другу, , но с большими различиями атрибутов, могут указывать пространственный outlier, хотя значения в обоих местоположениях могут казаться разумными при анализе набора данных в не пространственном пространстве. Один из основных недостатков других алгоритмов обнаружения извне приводит к некоторому истинному пространственным выбросам, игнорируемым, и идентифицированы ложные пространственные выбросы .

Для алгоритмов обнаружения отклонений вы можете взглянуть на это SIAM tutorial.

+0

Этот учебник SIAM очень информативен и полезен, особенно для ненормальных распределений. –

+0

да, но до сих пор отсутствует простой пример java, используя простой список чисел, чтобы найти outliers – lidox

1

Возможно, вам необходимо вычислить среднее и стандартное отклонение чисел в списке. Это должно быть относительно просто закодировать их вручную, см. http://www.mathsisfun.com/data/standard-deviation-formulas.html.

Вы также можете использовать Apache Math Commons library для выполнения вычислений.

0
package test; 

import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) { 
     double[] data = { 20, 65, 72, 75, 77, 78, 80, 81, 82, 83 }; 
     double[] data1 = null; 
     double[] data2 = null; 
     if (data.length % 2 == 0) { 
      data1 = Arrays.copyOfRange(data, 0, data.length/2); 
      data2 = Arrays.copyOfRange(data, data.length/2, data.length); 
     } else { 
      data1 = Arrays.copyOfRange(data, 0, data.length/2); 
      data2 = Arrays.copyOfRange(data, data.length/2 + 1, data.length); 
     } 
     double q1 = getMedian(data1); 
     double q3 = getMedian(data2); 
     double iqr = q3 - q1; 
     double lowerFence = q1 - 1.5 * iqr; 
     double upperFence = q3 + 1.5 * iqr; 
     System.out.println("Lower Fence: " + lowerFence); 
     System.out.println("Upper Fence: " + upperFence); 
    } 

    public static double getMedian(double[] data) { 
     if (data.length % 2 == 0) 
      return (data[data.length/2] + data[data.length/2 - 1])/2; 
     else 
      return data[data.length/2]; 
    } 
} 
+0

Не могли бы вы объяснить, что делает этот код? – Al0x

Смежные вопросы