Java 在一组双值中查找异常值

Java 在一组双值中查找异常值,java,statistics,weka,outliers,Java,Statistics,Weka,Outliers,我有一个双值列表,我想在其中找到异常值。weka是否提供了解决问题的算法 您可能需要计算列表中数字的平均值和标准偏差。手工编写这些代码应该相对简单,请参阅 您还可以使用来进行计算。(第一个链接),您有一个使用WEKA的异常值算法的全文实现 此外,还介绍了所使用的算法 S.Shekhar等人在论文“中”提出。论文显示 几个空间异常检测测试。例如,一个 变异函数云显示邻域相关的数据点 关系。对于每一对位置,该值的平方根 位置处的属性值与 绘制位置之间的欧几里德距离。在数据集中 表现出强烈的空间依赖性

我有一个双值列表,我想在其中找到异常值。weka是否提供了解决问题的算法

您可能需要计算列表中数字的平均值和标准偏差。手工编写这些代码应该相对简单,请参阅

您还可以使用来进行计算。

(第一个链接),您有一个使用WEKA的异常值算法的全文实现

此外,还介绍了所使用的算法

S.Shekhar等人在论文“中”提出。论文显示 几个空间异常检测测试。例如,一个 变异函数云显示邻域相关的数据点 关系。对于每一对位置,该值的平方根 位置处的属性值与 绘制位置之间的欧几里德距离。在数据集中 表现出强烈的空间依赖性,属性中的方差 差异数据集表现出强烈的空间依赖性 属性差异中的方差将随着值的增加而增加 位置之间的距离。相互靠近的位置, 但如果属性差异较大,则可能表示存在空间差异 异常值,即使两个位置的值看起来都是 在非空间地检查数据集时合理。一个主要的 其他离群点检测算法的缺点导致了一些真实的错误 忽略了空间异常值,并发现了一些虚假的空间异常值 确定


对于异常值检测算法,您可以看一看。

SIAM教程内容丰富,非常有用,特别是对于非正态分布。是的,但是仍然缺少一个简单的java示例,该示例使用简单的数字列表来查找异常值
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];
    }
}