使用布尔值搜索标准开发的异常值,然后使用 java 打印异常值

Use boolean to search for outliers of standard dev and then print the outliers using java

我想做的是找出一种方法来在此处打印标准偏差的异常值。离群值被定义为方差大于标准差的 2 倍。我无法弄清楚如何但我已经开始创建一个布尔标志,但是我不明白这个的动态。有人可以帮我弄清楚如何以某种方式打印出异常值吗?谢谢。

public class Main {

public static void main(String[] args)
{
    {
        Algebra n = new Algebra();
        System.out.println(" ");
        System.out.println("The maximum number is: " + n.max);
        System.out.println("The minimum is: " + n.min);
        System.out.println("The mean is: " + n.avg);
        System.out.println("The standard deviation is " + n.stdev);

        }
}
}

第二部分:

public class Algebra 
{
static int[] n = createArray();
int max = displayMaximum(n);
int min = displayMinimum(n);
double avg = displayAverage(n);
double stdev = displayStdDev(n);

public boolean outliers() {
    for(int i = 0; i < n.length; i++)
    {
    boolean flag = (n[i] < stdev*2);
    }
    return          
}


public Algebra()
{
this(n);
System.out.println("The numbers that are outliers are ");
for(int i = 0; i < n.length; i++) 
{
System.out.print(" " + (n[i] < stdev*2));

}
}
public Algebra(int[] n)
{
    createArray();
}
public static int[] createArray() 
{
        int[] n = new int[100];
        for(int i = 0; i < n.length; i++)
        n[i] = (int)(Math.random()*100 + 1);
        return n;
}
public int displayMaximum(int[] n)
{
    int maxValue = n[0]; 
    for(int i=1; i < n.length; i++){ 
      if(n[i] > maxValue){ 
         maxValue = n[i]; 
      } 
    } 
    return maxValue;
            }
public int displayMinimum(int[] n)
{ 
    int minValue = n[0]; 
    for(int i=1;i<n.length;i++){ 
      if(n[i] < minValue){ 
        minValue = n[i]; 
      } 
    } 
    return minValue; 
}
protected double displayAverage(int[] n) 
{
    int sum = 0;
    double mean = 0;
    for (int i = 0; i < n.length; i++) {
    sum += n[i];
    mean = sum / n.length;
    }
    return mean;
}
protected double displayStdDev(int[] n)
{
    int sum = 0;
    double mean = 0;
    for (int i = 0; i < n.length; i++) {
    sum = sum + n[i];
    mean = sum/ n.length;
    }
    double squareSum = 0.0;

    for (int i = 0; i < n.length; i++)
    {
        squareSum += Math.pow(n[i] - mean, 2);
    }
    return Math.sqrt((squareSum) / (n.length - 1));

}
}

方差定义为与均值的平方差。这是一个相当直接的计算。

public static double variance(double val, double mean) {
   return Math.pow(val - mean, 2);
}

您将异常值定义为方差大于标准差 x2 的实例。

public static boolean isOutlier(double val, double mean, double std) {
   return variance(val, mean) > 2*std;
}

然后您只需要遍历这些值并打印任何评估为离群值的值。

public void printOutliers() {
    for (int i : n) {
        if (isOutlier(i, avg, stdev)) {
            ...
        }
    }
}

您应该注意,如果一个值被定义为离群值并随后被删除,那么之前被分类为离群值的值可能不再是。您可能还对当前集合中异常值的范围感兴趣;一个值可能比另一个值在更大程度上是离群值。