機器學習知識點(三)方差和標準差Java實現
阿新 • • 發佈:2019-02-09
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