置信區間究竟是什麼
百度百科:置信區間是指由樣本統計量所構造的總體參數的估計區間。在統計學中,一個機率樣本的置信區間(Confidence interval)是對這個樣本的某個總體參數的區間估計。置信區間展現的是這個參數的真實值有一定機率落在測量結果的周圍的程度,其給出的是被測量參數的測量值的可信程度,即前面所要求的“一個機率”。
這個解釋有點反人類,如果不事先了解置信區間的話,應該是沒法看懂的。
參考了知乎上的答案:胡阿福 https://www.zhihu.com/question/26419030/answer/7220207
假設你叫李三,你開一個豬腳店,你希望知道你每天賣出去多少碗豬腳,一般的思路是說,我記錄30天每天賣多少,然後平均數得到一天賣100碗,ok,任務完成,這就是你想知道的答案。
然而,事實上,由于你樣本量過小或者有極端值等等情況,使得你這個答案,和實際情況不太一緻,你準備了100碗,結果今天有110個人來買,找誰哭去? 這個時候,你就想,嗯,我應該指定一個範圍,聰明!統計學家也這樣想,那麼這個範圍怎麼算,就是這裡說的置信區間。
如果你豬腳店的均值100,方差30,那麼标準誤就是5.5,這時你的範圍就是100-Za*30/5.5至100+Za*30/5.5之間,這個a就是置信系數,所謂95%的置信區間,就是在正态分布中,這個值是1.96,也就是算出來100-1.96*5.5至100+1.96*5.5之間,也就是89至111之間,嗯,對啦,李老闆你就準備這個數就好啦~
什麼,你說店裡今天賣了112碗,哼,才不是我算錯呢,是因為這個範圍發生的可能性是95%啊,也就是說,出現在這個範圍的可能性并不是100%呢~
李老闆内心os:你tm在逗我?再說這麼大範圍我怎麼備貨?
想把範圍縮小?沒問題,把z變小好啦,不過事先聲明z越小,這個a越小,也就是說,這個範圍發生的機率就小啦~完全可以改,那,發生機率不到30%你不要怪我喲~
綜上,置信區間其實是對真實情況估計的結果。重點是在于這個置信水準,置信水準越大,也就是說越可能包含真實結果,為了保證結果被包含,這個範圍就越寬泛。
那是不是一定要95%?
不絕對,95%隻是統計學上的約定俗成。能改,回看上上一段,你要冒着結果并不能大機率正确的風險~
上述的解釋很通俗地解釋了置信區間和95%置信水準,其中關鍵點在于,根據置信區間算出來的結果隻是一個接近正确答案的可能值(範圍),他有95%(置信水準)的可能性是真的。
這個例子比較生動,但是還是有點東西沒有解釋準确,那就是樣本和總體。李三的豬腳店其實并不存在一個固定的可測量的結果值,統計上可以取樣,總體卻是一直在變化着的。
了解上述例子後,換一個比較死闆的例子。
假設二狗子買彩票,現在需要知道該彩票的中獎率,最正确的操作應當是買下所有彩票,用中獎的彩票數除去總數,二狗子沒那麼多錢,是以需要換個方法。
二狗子叫來100個兄弟一起買彩票,每人買100張,構成100個樣本。每個樣本都可以算出中獎率和标準差,樣本越多越大,其接近真相的中獎率和标準差就越準,這兩個值用于正态分布計算。
關于其在正态分布上的應用……
正态分布的θ=(μ,σ^2)(這兩個名額也是整個總體的均值和方差),而用n個服從同一正态分布的随機變量進行最大似然估計的結果是Argmax L(θ)=(x bar,s^2)(也就是樣本的均值和方差)……
根據中心極限定理,當n趨于無窮時(x bar−μ)/(σ/sqrt(n))的分布收斂于标準正态分布……使用σ(總體的标準差)的最大似然估計值s(樣本的标準差)來替代σ,根據标準正态分布,即可求出μ(總體的均值)的95%置信區間……
最終計算出來的結果長這樣:(

,
)
其中,c是95%置信度所對應的critiacl value值,M為樣本量。都是已知量,假設最後結果為(0.45,0.55),這個結果代表:彩票的中獎率是0.45-0.55之間,這個結果隻有95%的可能性是對的,這個結果解釋需要明确兩點。
1.如果繼續采樣,也就是再叫一個兄弟買100張彩票,他的中獎率很大可能(95%)是落在0.45-0.55之間的。
2.總體的彩票中獎率是不是一定在0.45-0.55之間?也不一定,隻能說,極大機率是在0.45-0.55内,總體的結果在沒有拿到确切總量計算之前都是很難确定的,是以說,該方法計算出來的隻是一個機率值。
置信區間和人工智能
高等數學之前認為,數學非0即1,如果隻是一個機率很難稱之為科學(數學本來就不是科學),用哲學來形容更好一些。這恰好就是人工智能應用的根本算法。
人工智能學科很複雜,其本質是仿人類的反應,學習,動作。而人類對事物的判斷就源于生存經驗和逐漸糾正學習。當人的思維經驗判斷某件事發生的機率為95%的時候,就是一個大機率事件,做出相應的反應。
python計算
python是深度學習的主流語言,封裝了很多算法包,寫一個計算機率的程式非常簡單。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
N = 10000
x = np.random.normal(0, 1, N)
# ddof取值為1是因為在統計學中樣本的标準偏差除的是(N-1)而不是N,統計學中的标準偏差除的是N
# SciPy中的std計算預設是采用統計學中标準差的計算方式
mean, std = x.mean(), x.std(ddof=1)
print(mean, std)
# 計算置信區間
# 這裡的0.9是置信水準
conf_intveral = stats.norm.interval(0.9, loc=mean, scale=std)
print(conf_intveral)
這裡一共就兩個函數,一個是随機擷取符合正态分布的10000個資料 np.random.normal,另一個是計算置信區間的 stats.norm.interval
計算結果:(-1.6297070531642777, 1.6429401188504407)
完