使用布尔值搜索标准开发的异常值,然后使用 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)) {
...
}
}
}
您应该注意,如果一个值被定义为离群值并随后被删除,那么之前被分类为离群值的值可能不再是。您可能还对当前集合中异常值的范围感兴趣;一个值可能比另一个值在更大程度上是离群值。
我想做的是找出一种方法来在此处打印标准偏差的异常值。离群值被定义为方差大于标准差的 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)) {
...
}
}
}
您应该注意,如果一个值被定义为离群值并随后被删除,那么之前被分类为离群值的值可能不再是。您可能还对当前集合中异常值的范围感兴趣;一个值可能比另一个值在更大程度上是离群值。