1. 程式人生 > >【程式設計師眼中的統計學(7)】正態分佈的運用:正態之美

【程式設計師眼中的統計學(7)】正態分佈的運用:正態之美

作者 白寧超
2015年10月15日18:30:07

摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越來越重要。本系列統計學的學習基於《深入淺出統計學》一書(偏向程式碼實現,需要讀者有一定基礎,可以參見後面PPT學習)。正如(吳軍)先生在《數學之美》一書中闡述的,基於統計和數學模型對機器智慧發揮重大的作用。諸如:語音識別、詞性分析、機器翻譯等世界級的難題也是從統計中找到開啟成功之門鑰匙的。尤其是在自然語言處理方面更顯得重要,因此,對統計和數學建模的學習是尤為重要的。最後感謝團隊所有人的參與。(

)

 目錄

【程式設計師眼中的統計學(3)】概率計算:把握機會

【程式設計師眼中的統計學(11)】卡方分佈的應用

1正態分佈描述

正態分佈是最重要的一種概率分佈。正態分佈概念是由德國的數學家和天文學家Moivre(棣莫弗)於1733年受次提出的,但由於德國數學家Gauss(高斯)率先將其應用於天文學家研究,故正態分佈又叫高斯分佈。正態分佈起源於誤差分析,早期的天文學家通過長期對一些天體的觀測收集到了大量資料,並利用這些資料天體運動的物理模型,其中第谷與開 普勒在建模中提出了一條原則—“模型選擇的最終標準是其與觀測資料的符合程度”,這個“符合程度”實質上蘊涵了誤差概率理論的問題,伽例略是第一個在其著作中提出隨機誤差這一概念的人。因其曲線呈鐘形,因此人們又經常稱之為鐘形曲線。我們通常所說的標準正態分佈是μ = 0,σ = 1的正態分佈。

1.1正態分佈的定義

正態分佈(Normal distribution)又名高斯分佈(Gaussian distribution),是一個在數學、物理及工程等領域都非常重要的概率分佈,在統計學的許多方面有著重大的影響力。正態分佈之所以被稱為正態,是因為它的形態看起來合乎理想。在現實生活中,遇到測量之類的大量連續資料時,你"正常情況下"會期望看到這種形態。

1.2正態分佈符號定義

若隨機變數X服從一個數學期望為μ、方差為的高斯分佈,記為N(μ,)。其概率密度函式為正態分佈的期望值μ決定了其位置,其標準差σ決定了分佈的幅度。因其曲線呈鐘形,因此人們又經常稱之為鐘形曲線。正態分佈有兩個引數,即均數(μ)和標準差(σ)。

μ是位置引數,當σ固定不變時, μ越大,曲線沿橫軸,越向右移動;反之, μ越小,則曲線沿橫軸,越向左移動。是形狀引數,當μ固定不變時,σ越大,曲線越平闊;σ越小,曲線越尖峭。通常用表示標準正態分佈。

1.3正態分佈公式

正態分佈函式密度曲線可以表示為:x服從正態分佈,記為X~N(m,s2)其中μ為均值,s為標準差X∈(-∞,+ )標準正態分佈另正態分佈的μ為0s1

標準正態分佈圖形如下所示

 

1.4正態分佈函式密度曲特徵

A、正態分佈函式密度曲線在橫軸上方均數處最高。

B、正態分佈函式密度曲線以均數為中心,左右對稱。

C、正態分佈函式密度曲線有兩個引數,即均數(μ)和標準差( s )。 μ是位置引數,當s固定不變時, μ越大,曲線沿橫軸,越向右移動;反之, μ越小,則曲線沿橫軸,越向左移動。是形狀引數,當μ固定不變時, s越大,曲線越平闊; s 越小,曲線越尖峭。通常用N( μ , )表示均數為μ ,方差為s的正態分佈。用N(0,1)表示標準正態分佈。

D、正態分佈函式密度曲線下面積的總和為1。

1.5正態概率計算公式

如圖下圖所示a到b的陰影部分面積其中ab為自變數,μ為期望s為標準差。

對於標準正態分佈概率求解公式如下,即令一般正態概率公式μ0s1,上下限為負無窮到正無窮即可得到,通常我們用來表示標準正態概率。

1.5標準正態分佈方差和期望

標準正態分佈期望E(x)=μ

標準正態分佈方差Var(x)=

1.6正態概率計算步驟

第一步:確定資料分佈:在做正態概率分計算,首先確定資料是否符合正態分佈,確定正態分佈的均值和方差。對一些不符和正態分佈的資料進行取對數或者樣本重新排列稱符合正態分佈的標準後,在確定均值和方差。

第二步:標準化(平移,收放):對一般正態分佈進行標準化,標準化的過程為先平移,平移過程用公式表達即,再對結果進行收放,收放過程即為,其中y= 則標準化公式:其中Z為標準分,x為隨機變數,μ為均值,s為標準差。

第三步:使用概率表:通過標準分,進行查表(標準正態分佈概率表),得到具體的概率。

2正態概率的應用

例:某公司準備通過考試招工300名。其中280名正式工,20名臨時工。實際報考人數為1675名。考試滿分400分。考試不久後,通過當地新聞媒體得到如下訊息:考試平均成績是166分,360分以上的高分考生31名。某考生的成績為256分。問他能否被錄取?若被錄取,能否是正式工?

數學建模:由具體問題,我們可以假設考生的成績分佈符合正態分佈。設考生的成績為x,最低分數線為,均值μ166,方差設為,正態分佈可以記作:

解決思想:根據條件求出方差 根據正態分佈求出最低分數線 ,根據考生的成績算出該考生在所有考生中的比例

3正態分佈的優缺點

3.1正態分佈優點

對於社會上遇到的大部分問題,其概率分佈規律基本都滿足正態分佈,為了計算某種概率,我們就可以通過數學建模利用正態分佈方便解決問題。

一般來說,如果一個量是由許多微小的獨立隨機因素影響的結果,那麼就可以認為這個量具有正態分佈(見中心極限定理)。從理論上看,正態分佈具有很多良好的性質 ,許多概率分佈可以用它來近似;還有一些常用的概率分佈是由它直接匯出的,例如對數正態分佈、t分佈、F分佈等。

在一定條件下可以利用正態分佈近似估算二項分佈和泊松分佈。

3.2正態分佈缺點

無法近似估算符合幾何分佈的問題,無法精確解決離散資料概率。

3.3正態分佈不適用場景

    資料離散性太大,資料不符合正態分佈特點,通過對資料進行取對數或者重新排序亦無法達到正態分佈特點,無法得出均數(期望)和標準差。

3.4正態分佈適用場景

    連續型資料或者資料離散性小,資料基本符合正態分佈特點,或者對不符合的資料進行取對數或者樣本重新排序達到正態分佈特點,有具體的均數(期望)和標準差。

4正態概率演算法輸入資料

4.1正態概率演算法輸入資料

* @param μ double,表示正態分佈均數(期望)

* @param double,表示正態分佈標準差(方差的開平方)

4.2正態概率演算法中間結果

* @param z double,表示正態分佈標準差

4.3正態分佈演算法輸出結果

* @return S1 double,表示正態概率值

4.4正態概率演算法圖形化展示

5正態概率演算法異常和誤差

5.1正態概率演算法可能異常或誤差

異常:算出的標準差超出概率表出現異常

誤差:保留小數位數造成不精確

5.2正態概率演算法異常或誤差處理

異常:解決,過小捕獲異常並給予概率為0。

誤差:解決,進行小數點位數自定義保留封裝,根據具體精度進行設定。

6正態概率演算法描述

6.1類和方法描述

類原始碼見源程式: Distribution.src.NormalDistribution.zheng04

方法描述:通過對需要計算標準概率的的正態分佈的均值和標準差進行計算得出具體標準分再通過呼叫org.apache.commons.math3.distribution類來實現。

6.2類和方法呼叫介面

見源程式:Distribution.src.NormalDistribution.zheng04

zheng04.java 下包含如下方法:

cumulativeProbability(double z) //需要求的正態分佈的標準分

呼叫封裝方法:

NumFormat.java 下如下方法:

ZeroFormat (double num ,int n) //對num數值保留位數n的自行設定

        /**
         * 保留幾位小數
         * @param num double,預備格式資料
         * @return result double,保留指定小數點資料
         */
        public static double ZeroFormat(double num,int n)
        {
            BigDecimal bigDecimal=new BigDecimal(num);
            //DecimalFormat ff = new DecimalFormat("#.0000");  //保留四位小數
            //double result = Double.valueOf(ff.format(num));
            //return result;
            return bigDecimal.setScale(n, BigDecimal.ROUND_HALF_UP).doubleValue();
                    //setscale(n,BigDecimal.ROUND_HALF_UP).doubleValue;
        }

6.3原始碼

package NormalDistribution;
import java.util.Scanner;

import org.apache.commons.math3.distribution.NormalDistribution;
/**
 * 
 * @(#)zheng01.java 
 * @Description:描述:根據提供的正態分佈的均值和標準差得到正態概率的具體實現。
 * @Definitions:定義:在處理符合正態分佈的連續型資料,知道了這組資料的均值和方差為了求得隨機變數符合某個範圍的概率為:P(X<x)這類問題稱之為正態概率。表示式為:X~N(μ,σ^2)             
 * @Explanation:符號解釋:μ為該組連續資料的均值;σ為該組連續資料的標準差。
 * @Comments:條件:在一組連續型資料,已知該組資料的均值和標準差,求解隨機變數x的正態概率。這種情況下適用於本演算法。
 * @優點:知道正態分佈具體的均值和標準差可以利用此演算法快速求出小於隨機變數X的正態概率。
 * @缺點:無法近似估算符合幾何分佈的問題,無法精確解決離散資料概率,對於沒有給出均值或者標準差的正態分佈無法計算。
 * @適用場景:連續型資料或者資料離散性小,資料基本符合正態分佈特點,或者對不符合的資料進行取對數或者樣本重新排序達到正態分佈特點,有具體的均數(期望)和標準差。。
 * @不適用場景:資料離散性太大,資料不符合正態分佈特點,通過對資料進行取對數或者重新排序亦無法達到正態分佈特點,無法得出均數(期望)和標準差。
 * @輸入/出引數:見具體方法
 * @異常/誤差:
 *          異常:輸入資料不合法,如:要求輸入double資料,輸入字母。
 *          誤差:保留小數位數造成不精確
 *       解決:
 *          異常:輸入不合法給予提示。
 *          誤差:進行小數點位數自定義保留封裝,根據具體精度進行設定。
 * @Create Date:  2015年8月6日16:39:25
 * @since   JDK1.6  s
 * @author Magicfairytail
 */
public class zheng04 {

    public static void main(String[] args) {
        /**
         * 均值為 μ標準差σ的正態分佈的具體實現
         * @param μ double型保留四位小數,表示正態分佈均值
         * @param σ double型保留四位小數,表示正態分佈標準差
         * @return S1 double型保留四位小數,表示p(X<x)的正態概率
         */
        NormalDistribution normalDistributioin = new NormalDistribution(0,1);//新建一個標準正態分佈物件
        Scanner in=new Scanner(System.in);
        do {
            System.out.println("請輸入ц:");
            double ц=in.nextDouble();
            //ц=NumberFormat.ZeroFormat(ц);//對所得資料保留4位小數
            System.out.println("請輸入σ:");
            double σ=in.nextDouble();
            //σ=NumberFormat.ZeroFormat(σ);    //對所得資料保留4位小數            

            System.out.println("請輸入x:");
            double x=in.nextDouble();
            //x=NumberFormat.ZeroFormat(x);//對所得資料保留4位小數
            double z=(x-ц)/σ;
            z=NumberFormat.ZeroFormat(z,4);//對所得資料保留4位小數
                try {
                    double S1 = normalDistributioin.cumulativeProbability(z);
                    S1=NumberFormat.ZeroFormat(S1,4);//對所得資料保留4位小數
                    System.out.println("正態分佈概率為:");
                    System.out.println(S1);
                    System.out.println();
                    System.out.println("請問您還要繼續輸入嗎?(1/0)");
                    
                } catch (Exception e) {
                    // 這裡的異常為所得的結果過小導致異常,直接將結果自動置0
                    System.out.println("正態分佈概率為:");
                    System.out.println("0");
                    System.out.println();
                    System.out.println("請問您還要繼續輸入嗎?(1/0)");
                }
            
        } while (in.nextInt()==1);//while迴圈,當輸入的值為1繼續,為其他值則終止程式
    }

}

7正態分佈的變換

7.1在隨機變數獨立性的情況下,正態分佈可以做以下的變換

; ;其中 ;

7.2在隨機變數獨立性的情況下,正態分佈方差和期望的變換

; ; ;

;; ;

那麼

7.3在隨機變數獨立觀察的情況下,正態分佈方差和期望的變換

8正態分佈估算二項分佈

8.1正態分佈估算二項分佈條件

a、二項分佈和正態分佈的形狀十分相似

b、np和nq雙雙大於5可以用正態分佈近似代替二項分佈

若符合以上2個條件,正態分佈的期望等於np,方差等於npq即;

其中n為二項分佈實驗總次數,p為一次成功的概率,q為。記作

8.2誤差修正

8.2.1連續修正概念

將離散資料轉換為連續標度時,所做的小幅調整,這個過程叫做連續修正

8.2.2連續修正使用方法

總結起來就是"小加大減",即在計算 這種形式的概率時,關鍵是要確保所選擇的範圍中包含離散數值a,在一個連續標度上一般加上相鄰兩個自變數單位距離的一半(eg:修正後即為;自變數X的單位距離為1);而在在計算 這種形式的概率時,一定要確保所選擇的範圍中包含離散數值b,在一個連續標度上一般減去相鄰兩個自變數單位距離的一半(eg:修正後即為;自變數X的單位距離為1);處理介於型資料時,需要進行連續性修正,以便確保a和b均包含在內(eg:修正後即為;自變數X的單位距離為1) tip:這裡的資料都為離散型資料,因為我們是拿正態分佈來估算二項分佈,所以就會存在誤差,通過對離散資料的連續修正則可以減小誤差。

9正態分佈估算泊松分佈

9.1正態分佈估算泊松分佈條件

a、泊松分佈的形狀與正態分佈相似

b、如果 ,則可用進行近似

若符合以上2個條件,我們就可以用正態分佈近似估算泊松分佈,正態分佈的期望等於,方差等於; 其中為泊松分佈的平均發生次數(或者發生率)。

tip:近似計算時注意連續性修正。

10正態分佈估算應用

10.1正態分佈近似估算二項分佈應用

在12個問題中答對5題或5題以下的概率,其中每個問題只有兩個備選答案。

使用二項分佈計算如下:

由題可知,即求出 ,其中

各個概率用下列公式進行計算:

其中

我們需要求 ,其中。為此,需要求。然後將算得的所有概率加起來。各個概率為:

將以上概率加起來,得到總概率為:

(保留三位小數)

使用正態分佈近似計算:

,即 ,近似正態分佈為,也就是。我們要求這裡注意連續性修正應為,先計算標準差(保留兩位小數)

這與二項分佈計算的0.387十分接近。

10.2正態分佈近似估算泊松分佈

遊樂園過山車發生故障的次數符合泊松分佈,其中 。求第一年的故障次數小於52次的概率有多大?

使用泊松分佈計算:

如果某物體以某種平均頻率發生故障,則這種情況符合泊松分佈,以均值為其引數,如果X表示一年內的故障次數,則

我們需要求 ,因此我們要求出52以內的所有X值分別對應的概率。

這個概率太過複雜這裡給出計算方法

使用正態分佈近似估算泊松分佈:

如果用X表示一年內故障次數,則

由於 較大,我們可以用正態分佈近似代替泊松分佈。即可以用

我們需要求故障次數小於52的概率,由於用連續概率分佈近似代替離散概率分佈,所以必須進行連續性修正。我們不應將52計算在內,只需要求出

計算標準分

(保留兩位小數)

通過查詢標準正態概率表可得結果為0.9656,則一年內的故障次數小於52的概率為0.9656。

11 總結與共享 

11.1總結

11.2共享