1. 程式人生 > >機器學習知識點(三)方差和標準差Java實現

機器學習知識點(三)方差和標準差Java實現

1、方差:方差是各個資料與平均數之差的平方的平均數。

2、標準差:

標準差(Standard Deviation) 

各資料偏離平均數的距離(離均差)的平均數,它是離差平方和平均後的方根。用σ表示。因此,標準差也是一種平均數

標準差是方差的算術平方根。

標準差能反映一個數據集的離散程度。平均數相同的,標準差未必相同。

3、參考程式碼:

package sk.ann;

import java.text.DecimalFormat;
import java.util.Random;

public class VarianceAndStandardDiviation {
	private final static double dmax=999;//Double.MAX_VALUE;//Double型別的最大值,太大的double值,相乘會達到無窮大
	private final static double dmin=Double.MIN_VALUE;//Double型別的最小值
	private final static int n=100;//假設求取100個doubl數的方差和標準差
	
	public static void main(String[] args){
		Random random = new Random();	
		double[] x=new double[n];
		for(int i=0;i<n;i++){//隨機生成n個double數
			x[i]=Double.valueOf(Math.floor(random.nextDouble()*(dmax-dmin)));
			System.out.println(x[i]);
		}
		//設定doubl字串輸出格式,不以科學計數法輸出	
		DecimalFormat df=new DecimalFormat("#,##0.00");//格式化設定
		//計算方差
		double dV=Variance(x);
		System.out.println("方差="+df.format(dV));
		//計算標準差
		double dS=StandardDiviation(x);
		System.out.println("標準差="+df.format(dS));
	}
	
	//方差s^2=[(x1-x)^2 +...(xn-x)^2]/n
	public static double Variance(double[] x) { 
		int m=x.length;
		double sum=0;
		for(int i=0;i<m;i++){//求和
		    sum+=x[i];
		}
		double dAve=sum/m;//求平均值
		double dVar=0;
		for(int i=0;i<m;i++){//求方差
			dVar+=(x[i]-dAve)*(x[i]-dAve);
		}
		return dVar/m;
	}
	
	//標準差σ=sqrt(s^2)
	public static double StandardDiviation(double[] x) { 
		int m=x.length;
		double sum=0;
		for(int i=0;i<m;i++){//求和
		    sum+=x[i];
		}
		double dAve=sum/m;//求平均值
		double dVar=0;
		for(int i=0;i<m;i++){//求方差
			dVar+=(x[i]-dAve)*(x[i]-dAve);
		}
		return Math.sqrt(dVar/m);	
	}
}
隨機執行的結果:
方差=80,345.83
標準差=283.45