前言
- 在大多數(shù)現(xiàn)實情況下,模型可以簡化并通過模型對顯式進行探索,本章可以學到的東西
- 數(shù)據(jù)分析中使用基礎模型
- 使用積累分布函數(shù)和概率密度來描述變量
- 使用preceding function(?)和很多工具來進行點估計和生成符合特定分布的隨機數(shù)
- 離散和連續(xù)隨機變量
模型和實驗
- 模型傾向于統(tǒng)計模型,在隨機實驗情況下
- 需要導入的包和包別名
from pandas import Series,DateFrame
import numpy.random as rnd
import scipy.stats as st #統(tǒng)計相關函數(shù)
積累分布函數(shù)
- 雖然直方圖能夠直觀感受數(shù)據(jù)的一個分布情況,但有時候我們需要精準的數(shù)據(jù)表達,那么利用積累分布函數(shù)
- 生成一個符合正態(tài)分布的隨機數(shù)據(jù)
mean=0 #均值
stdev=1 #標準差
nvalues=10 #隨機點的個數(shù)
norm_variate=rnd.normal(mean,stdev,nvalues)
- 這段代碼生成偽隨機數(shù),電腦不可能生成完全隨機數(shù),生成數(shù)字都會服從一個給定的分布。當然,這樣的隨機已經(jīng)能滿足大多數(shù)數(shù)據(jù)分析的需要。
- 積累分布函數(shù)以后都簡稱為cdf,在一個實際數(shù)據(jù)集中,cdf函數(shù)會是一個階段函數(shù)
分布
數(shù)據(jù)分布分為離散分布和隨機分布,對于離散或者連續(xù)變量數(shù)據(jù)分布會使用Scipy.stats中統(tǒng)計模塊來統(tǒng)計數(shù)據(jù),官方文檔地址:https://docs.scipy.org/doc/scipy/reference/stats.html
-
模塊組合函數(shù)命名方式
st.< rv_name>.< function>(< argument>)- st:選擇統(tǒng)計模塊包
- rv_name:分布名稱
- function:計算的具體函數(shù)
- argument:函數(shù)的參數(shù)
-
模塊中每個分布都會有的部分函數(shù):
- rvs():生成偽隨機數(shù)
- cdf():積累分布函數(shù)
- pdf(),pmf():連續(xù)變量:pdf隨機變量概率密度;離散變量:pmf概率質(zhì)量函數(shù)
- ppf():積累分布函數(shù)的逆函數(shù),百分數(shù)點->變量數(shù)值
- stats():分布的統(tǒng)計量
- mean(),std(),or var():變量均值,標準差,方差
- fit():將數(shù)據(jù)來擬合變量分布,返回數(shù)據(jù)的shape,location(位置),scale(反映數(shù)據(jù)形狀)參數(shù)
對于正態(tài)分布,location對應mean,scale對應標準差std
-
例子:繪制一個正態(tài)分布的CDF函數(shù)和PDF函數(shù)圖形
- 數(shù)據(jù)(模擬的是年齡超過20歲女性的身高分布):
N(樣本點個數(shù))=4857
mean(均值)=63.8
serror(標準誤差)=0.06
sdev(樣本標準差)=serror*sqrt(N)[公式]
rvnorm=st.norm(loc-mean,scale=sdev)
x軸數(shù)據(jù)范圍:xmin=mean-3sdev,xmax=mean+3sdev (根據(jù)2
3delta原則) - 代碼
xmin = mean-3*sdev xmax = mean+3*sdev xx = np.linspace(xmin,xmax,200) plt.figure(figsize=(8,3)) plt.subplot(1,2,1) plt.plot(xx, rvnorm.cdf(xx)) plt.title('Cumulative distribution function') plt.xlabel('Height (in)') plt.ylabel('Proportion of women') plt.axis([xmin, xmax, 0.0, 1.0]) plt.subplot(1,2,2) plt.plot(xx, rvnorm.pdf(xx)) plt.title('Probability density function') plt.xlabel('Height (in)') plt.axis([xmin, xmax, 0.0, 0.1]);
-
結果
正態(tài)分布CDF與PDF - 計算這里rvnorm的1/4百分位數(shù)可以使用ppf(),那么數(shù)值為rvnorm.ppf(0.25)
- 計算該數(shù)據(jù)的點估計參數(shù)可以由如下代碼得到:
mean,variance,skew,kurtosis=rvnorm.stats(moments='mvks')
- mean:變量的均值 - variance:變量方差 - skew:偏度,反映數(shù)據(jù)的對稱程度 - kurtosis:峰度值,反映數(shù)據(jù)的峰是尖銳的還是平滑的,正態(tài)分布的峰度值=0,因為該分布是參考分
- 數(shù)據(jù)(模擬的是年齡超過20歲女性的身高分布):
-
weibull分布
- 參數(shù):eta(scale參數(shù)),beta(shape參數(shù)),loc 都是正數(shù)
- 描述設備故障與時間的關系
- 參數(shù)描述
- shape參數(shù)beta:
- beta<1:
故障率隨著時間遞減,反映機器是有缺陷的,使用過程會很早就失靈 - beta=1:
故障率是常數(shù),那么隨機數(shù)與時間之間的分就是指數(shù)分布 - beta>1:
故障率隨著時間遞增而遞增,反映正常使用機器的過程
- beta<1:
- scale參數(shù) yta決定分布傳播的范圍,scale參數(shù)越大那么對于機器故障的估計就存在越大不確定性。注意該分布中scale參數(shù)不是模型的標準差
- shape參數(shù)beta:
- 例子:
- 數(shù)據(jù):
eta = 1.0 beta = 1.5 rvweib = st.weibull_min(beta, scale=eta)
- 根據(jù)數(shù)據(jù)繪制直方圖
weib_variates = rvweib.rvs(size=500) weib_df = DataFrame(weib_variates,columns=['weibull_variate']) weib_df.hist(bins=30)
-
結果
enter image description here
-
概率分布函數(shù)pdf
- 反映連續(xù)隨機變量概率密度,其中一段與x軸之間面積表示概率
-
概率質(zhì)量函數(shù)pmf
- 表示離散變量
模型的產(chǎn)生
- 模型是用來簡化數(shù)據(jù)計算模式,概率模型考慮相關因素,重要指標,近似模擬數(shù)據(jù)從而簡化計算模式
- 例子
- 二項分布模型(N,P)
- 有N個離散變量,變量之間相互獨立,每個變量服從二次分布,每個變量=1的概率都是P
- 適用情景:質(zhì)量控制系,1代表質(zhì)量達標的項,0代表質(zhì)量不達標的項,那么就可以得到系統(tǒng)中達標項的模型
- 可以利用pmf函數(shù)來查看二項分布的分布情況
- 代碼
N = 20 p = 0.5 rv_binom = st.binom(N, p) xx = np.arange(N+1) cdf = rv_binom.cdf(xx) pmf = rv_binom.pmf(xx) xvalues = np.arange(N+1) plt.figure(figsize=(9,3.5)) plt.subplot(1,2,1) plt.step(xvalues, cdf, lw=2, color='brown') plt.grid(lw=1, ls='dashed') plt.title('Binomial cdf, $N=20$, $p=0.5$', fontsize=16) plt.subplot(1,2,2) left = xx - 0.5 plt.bar(left, pmf, 1.0, color='CornflowerBlue') plt.title('Binomial pmf, $N=20$, $p=0.5$', fontsize=16)#使用latex公式寫法 plt.axis([0, 20, 0, .18]);
-
結果
enter image description here - 當樣本數(shù)量很大時,二項分布近似正態(tài)分布,那么就有de Moivre估計,估計的正態(tài)分布參數(shù)與二項分布有一樣的均值和方差,mean=NP std=sqrt(NP*(1-P))
- 二項分布模型(N,P)
多變量分布
- 多變量分布就是不僅觀察一個樣本數(shù)據(jù),會有多種類型的樣本數(shù)據(jù);除了數(shù)據(jù)分布情況,可能會關注變量之間的相關性
- 典型多變量分布是雙變量正態(tài)分布,該分布是scipy.stats中一部分,那么就可以利用該部分生成隨機變量
- 生成服從雙變量正態(tài)分布的代碼:
binorm_varites=st.multivariate_normal.rvs(mean=[0,0],size=300)#方差是默認值1