




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。Statistics (Statistics 介紹隨機變量獲得幫助通用方法位移與縮放形態參數凍結分布廣播離散分布的
2、特殊之處 分布擬合性能問題與注意事項遺留問題構造具體的分布創建一個連續分布,繼承rv continuous類繼承 rv_discrete 類樣本分析描述統計,T檢驗和KS檢3處分布尾部正態分布的特殊檢驗 比較兩個樣本均值對于兩個不同的樣本進行的KS檢3會 核密度估計單元估計多元估計>>> print 'number of continuous distributions:', len (dist_continu)介紹在這個教程我們討論一部分模塊的特性。這里我們的意圖是提供給使用者一個關于這個包的實用性知 識。我們推薦reference manual來介紹更多的
3、細節。注意:這個文檔還在發展中。隨機變量有些通用的概率分布類被圭寸裝在 continuous random variables 以及 discrete random variables 中。有80多個連續性隨機變量(RVs)以及10余個離散隨機變量已經用這些類建立。同樣,新的程序和 分布可以被用戶新建(如果你構造了一個,請提供它給我們幫助發展這個包)。所有統計函數被放在子包中,且有這些函數的一個幾乎完整的列表可以使用info(stats) 獲得。這個列表里的隨機變量也可以從 stats子包的docstring中獲得介紹。在接下來的討論中,我們著重于連續性隨機變量(RVs) o幾乎所有離散變量也
4、符合下面的討論,但是我們也要指出一些區別在“離散分布的特殊之處”中。獲得幫助所有分布可以使用help函數得到解釋。為獲得這些信息只需要使用像這樣的簡單調用:>>>>>> from scipy import stats>>> from import norm>>> print作為例子,我們用這種方式找分布的上下界%s upper: %s %,>>>>>> print 'bounds of distribution lower:bounds of distribution lower
5、: -inf, upper: inf我們可以通過調用dir(norm)來獲得關于這個(正態)分布的所有方法和屬性。應該看到,一些方法 是私有方法盡管其并沒有以名稱表示出來(比如它們前面沒有以下劃線開頭),比如veccdf就只用于 內部計算(試圖使用那些方法將引發警告,因為它們可能會在后續開發中被移除)為了獲得真正的主要方法,我們列舉凍結分布的方法(我們將在下文解釋何謂“凍結分布”)>>>> >> rv = norm()> >> dir (rv) # reformatted'class ', 'delattr'
6、, ' dict', 'doc', 'getattribute','hash ', 'init ', 'module', 'new', 'reduce ', 'reduceex ','repr_ ', '_ setattr_ ', '_ str_ ', '_ weakref ', 'args', 'cdf', 'dist','entr
7、opy', 'isf', 'kwds', 'moment', 'pdf', 'pmf', 'ppf', 'rvs', 'sf', 'stats'最后,我們能通過內省獲得所有的可用分布的信息。>>>> >> import warnings>>> ('ignore' , DeprecationWarning )> >> dist_continu = d for
8、d in dir (stats) if.isinstance (getattr (stats,d),> >> dist_discrete = d for d in dir (stats) if.isinstance (getattr (stats,d),len (dist_discrete)number of continuous distributions: 84>>> print 'number of discrete distributions: number of discrete distributions: 12通用方法rvs:隨機變量(
9、就是從這個分布中抽一些樣本)pdf:概率密度函數。cdf :累計分布函數sf :殘存函數(1-CDF)ppf:分位點函數(CDF的逆)isf :逆殘存函數(sf的逆)stats:返回均值,方差,(費舍爾)偏態,(費舍爾)峰度 moment分布的非中心矩。讓我們使用一個標準的 RV作為例子o>>>>>> (0)為了計算在一個點上的cdf,我們可以傳遞一個列表或一個numpy數組>>>>>> (-1. , 0, 1)array( 0., 0.)>>> import numpy as np>>>
10、; (-1. , 0, 1)array( 0., 0.)相應的,像pdf,cdf之類的簡單方法可以用矢量化其他實用的方法可以像這樣使用。>>>>>> (),(),()>>> (moments = "mv")(array, array)為了找到一個分布的中心,我們可以使用分位數函數ppf,它是cdf的逆>>>>>>為了產生一個隨機變量集合O>>>>>> (size =5)array(卜0., 1.,-0., ,-0.)不要認為產生了五個變量>&g
11、t;>>>> (5)欲知其意,請看下一部分的內容。位移與縮放所有連續分布可以操縱loc以及scale參數作為修正location 和scale的方式。作為例子,標準正態分布的location是均值而scale是標準差。>>>> >> (loc = 3, scale = 4, moments = "mv")(array, array)通常經標準化的分布的隨機變量X可以通過變換(X-loc)/scale 獲得。它們的默認值是loc=0以及scale=1.聰明的使用loc與scale可以幫助以靈活的方式調整標準分布達到所
12、想要的效果。為了進一步說明縮放的效果,下面給出期望為1/人指數分布的cdf oF(x)=1 - exp(-入 x)通過像上面那樣使用scale ,可以看到得到想要的期望值。>>>> >> from import expon> >> (scale =3.)均勻分布也是令人感興趣的:>>>> >> from import uniform>>> (0, 1, 2, 3, 4, 5, 10c= 1, scale = 4)array( 0. , 0. , , , , 1.)最后,聯系起我們在前面段
13、落中留下的(5)的問題。事實上,像這樣調用一個分布,其第一個參數,像之前的5,是把10c參數調到了 5,讓我們看:>>>> >> (5, size =500)在這里,為解釋最后一段的輸出:(5)產生了一個正態分布變量,其期望,即10c=5.我傾向于明確的使用1oc,sca1e 作為關鍵字而非像上面那樣利用參數的順序。因為這看上去有點令人困惑。我們在我們解釋“凍結 RV的主題之前澄清這一點。形態參數雖然一個一般的連續隨機變量可以通過賦予loc和scale參數確定,但一些分布還需要額外的形態參數。作為例子,看到這個伽馬分布,這是它的密度函數Y (x,a)=入(入
14、 x) a-1 F (a)e -入 x,要求一個形態參數a。注意到 人的設置可以通過設置scale關鍵字為1/人進行。讓我們檢查伽馬分布的形態參數的名字的數量。(我們知道從上面知道其應該為1)>>>> >> from import gamma>>>1>>>現在我們設置形態變量的值為1以變成指數分布。所以我們可以容易的比較是否得到了我們所期望的 結果。>>>>>> gamma(1, scale =2.). stats(moments ="'mv")(array,
15、 array)注意我們也可以以關鍵字的方式指定形態參數:>>>>>> gamma(a=1, scale =2.). stats(moments ="mv")(array, array)凍結分布不斷地傳遞loc與scale關鍵字最終會讓人厭煩。而凍結RV勺概念被用來解決這個問題。>>>>>> rv = gamma(1, scale =2.)通過使用rv,在任何情況下我們不再需要包含 scale與形態參數。顯然,分布可以被多種方式使用, 我們可以通過傳遞所有分布參數給對方法的每次調用(像我們之前做的那樣)或
16、者可以對一個分布對象凍結參數。讓我們看看是怎么回事:>>>>>> (),()這正是我們應該得到的。廣播像pdf這樣的簡單方法滿足numpy的廣播規則。作為例子,我們可以計算t分布的右尾分布的臨界值 對于不同的概率值以及自由度。>>>>>> ,10, 11)array( 1., 1., 2.,1., 1., 2.)這里,第一行是以10自由度的臨界值,而第二行是以11為自由度的臨界值。所以,廣播規則與下面調 用了兩次isf產生的結果相同。>>>>>> ,10)array( 1., 1., 2
17、.)>>>,11)array( 1., 1., 2.)但是如果概率數組,如,與自由度數組,如10,11,12具有相同的數組形態,則進行對應匹配,我 們可以分別得到10% 5% 1娓的臨界值對于10, 11,12的自由度。>>>>>> ,10, 11, 12) array( 1., 1., 2.)離散分布的特殊之處離散分布的方法的大多數與連續分布很類似。當然像 pdf被更換為密度函數pmf,沒有估計方法,像 fit就不能用了。而scale不是一個合法的關鍵字參數。Location參數,關鍵字10c則仍然可以使用 用于位移。cdf的計算要求一些
18、額外的關注。在連續分布的情況下,累積分布函數在大多數標準情況下是嚴格遞 增的,所以有唯一的逆。而 cdf在離散分布,無論如何,是階躍函數,所以 cdf的逆,分位點函數, 要求一個不同的定義:ppf(q) = minx : cdf(x) >= q, x integer為了更多信息可以看這里。我們可以看這個超幾何分布的例子>>>>>> from import hypergeom>>> M, n, N = 20, 7, 12如果我們在一些整數點使用cdf,則它們的cdf值再作用ppf會回到開始的值。>>>>>&
19、gt; x = ( 4) *2>>> xarray(0, 2, 4, 6)>>> prb = (x, M, n, N)>>> prbarray( , , 0.,0.)>>> (prb, M, n, N)如果我們使用的值不是cdf的函數值,則我們得到一個更高的值。>>>>>> (prb + 1e-8 , M, n, N)array( 1., 3., 5., 7.)>>> (prb - 1e-8 , M, n, N)array( 0., 2., 4., 6.)分布擬合非凍結
20、分布的參數估計的主要方法:fit :分布參數的極大似然估計,包括 location 與scalefit_loc_scale:給定形態參數確定下的location 和scale參數的估計nnlf:負對數似然函數expect:計算函數pdf或pmf的期望值。性能問題與注意事項每個方法的性能與運行速度根據分布的不同表現差異極大。方法的結果可以由兩種方式獲得,精確計算或使用獨立于各具體分布的通用算法。對于精確計算,一個分布能使用這種方式的第一種情況,這個分布是包中直接給你的(如標準正態分 布),第二,給出解析形式,第三通過或或的rvs特殊函數給出。一般來說使用精確計算會比較快。另一方面,通用方法被用于
21、當分布沒有被指派明確的計算方法時使用。為了定義一個分布,只有 pdf 或cdf是必須的;通用方法使用數值積分和求根法得到結果。作為例子,rgh = 2, 2, 2, size=100)以這種方式創建了 10嚇隨機變量(抽了 100個值),這在我的電腦上花了 19秒(譯者:我花了秒),對 比取一百萬個標準正態分布的值只需要 1秒。遺留問題里的分布最近進行了升級并且被仔細的檢查過了,不過仍有一些問題存在。分布在很多參數區間上的值被測試過了, 然而在一些奇葩的邊界,仍然可能有錯誤的值存在。fit的極大似然估計以默認值作為初始參數將不會工作的很好,用戶必須指派合適的初始參數。并且,對于一些分布使用極大
22、似然估計本身就不是一個好的選擇。構造具體的分布下一個例子展示了如何建立你自己的分布。更多的例子見分布用法以及統計檢驗創建一個連續分布,繼承 rv_continuous 類創建連續分布是非常簡單的。>>>>>> from scipy import stats>>> class deterministic_gen. def _cdf ( self , x):.return (x < 0, 0. , 1.). def _stats (self ):.return 0. , 0. , 0. , 0.>>>>>&g
23、t; deterministic = deterministic_gen(name ="deterministic" )>>> (-3, 3,)array( 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1.)令人高興的是,pdf也能被自動計算出來:>>>> >> (-3, 3,)array( +00, +00, +00,+00, +00, +00,+04,)注意這種用法的性能問題,參見“性能問題與注意事項” 一節。這種缺乏信息的通用計算可能非常慢。 而且再看看下面這個準確性的例
24、子:>>>> >> from import quad> >> quad, - 1e-1 , 1e-1)但這并不是對pdf積分的正確的結果,實際上結果應為 1.讓我們將積分變得更小一些。 >>>>>> quad, -1e-3, 1e-3) # warning removed ,這樣看上去好多了,然而,問題本身來源于pdf不是來自包給定的類的定義。繼承 rv_discrete 類在之后我們使用產生一個離散分布,其有一個整數區間截斷概率。通用信息通用信息可以從rv_discrete 的docstring 中得到
25、。>>>>>> from import rv_discrete>>> help(rv_discrete)我們學到這一點:“你可以構建任意一個像P(X=xk尸pk 一樣形式的離散rv ,通過傳遞(xk,pk)元組序列給rv_discrete初始化方法(通過value=keyword方式),但其不能有0概率值。”接下來,還有一些進一步的要求:關鍵字名字必須知道。Xk點必須是整數小數的有效位數應當被給出。事實上,如果最后兩個要求沒有被滿足,一個異常將被拋出或者導致一個錯誤的數值。一個例子讓我們開始辦,首先>>>> >
26、> npoints = 20# number of integer support points of the distribution minus 1> >> npointsh= npoints / 2> >> npointsf= float (npoints)> >> nbound = 4# bounds for the truncated normal> >> normbound = ( 1+1/ npointsf)* nbound # actual bounds of truncated normal>
27、 >> grid = ( - npointsh, npointsh+2, 1)# integer grid> >> gridlimitsnorm = / npointsh * nbound # bin limits for the truncnorm> >> gridlimits = grid -# used later in the analysis> >> grid = grid:-1> >> probs = -normbound, normbound)> >> gridint = gri
28、d最后我們可以繼承rv_discrete 類>>>> >> normdiscrete = (values =(gridint,.(probs, decimals=7), name ='normdiscrete' )現在我們已經定義了這個分布,我們可以調用其所有常規的離散分布方法。>>>> >> print 'mean = % variance =% skew = % kurtosis =% %. (moments = 'mvsk')mean = , variance = , skew
29、 = , kurtosis =>>>> >> nd_std = (moments -v')測試上面的結果讓我們產生一個隨機樣本并且比較連續概率的情況。>>>»> n_sample = 500# fix the seed for replicability»> rvs = (size =n_sample)»> rvsnd = rvs»> f, I = (rvs, bins =gridlimits)»> sfreq = (gridint, f, probs
30、*n_sample) . T»> print sfreq+01 +00 +00 +00 +00 +00 +00 +00 +00+00 +00 +00+00 +00 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +01 +01+00 +00 +00+00 +00 +00+00 +00 +00 +00 +01 +00 (Source code )(Source code )接下來,我們可以測試,是否我們的樣本取自于一個normdiscret
31、e分布。這也是在驗證是否隨機數是以正確的方式產生的。卡方測試要求起碼在每個子區間(bin )里具有最小數目的觀測值。我們組合末端子區間進大子區間 所以它們現在包含了足夠數量的觀測值。>>>> >> f2 =(町5.sum(), f 5:-5, f -5: . sum()> >> p2 = (probs:5. sum(), probs 5: - 5, probs - 5: . sum()> >> ch2, pval = (f2, p2 *n_sample)>>>>>> print '
32、;chisquare for normdiscrete: chi2 =%pvalue = % %(ch2, pval)chisquare for normdiscrete: chi2 = pvalue =P值在這個情況下是不顯著地,所以我們可以斷言我們的隨機樣本的確是由此分布產生的。樣本分析首先,我們創建一些隨機變量。我們設置一個種子所以每次我們都可以得到相同的結果以便觀察。作 為一個例子,我們從t分布中抽一個樣本。>>>> >> x = size =1000)這里,我們設置了 t分布的形態參數,在這里就是自由度,設為10.使用size=1000表示我們的樣
33、本由100嚇抽樣是獨立的(偽)。當我們不指派10c和scale時,它們具有默認值0和1.描述統計X是一個numpy數組。我們可以直接調用它所有的方法。>>>> >> print (), ()# equivalent to (x), (x)>>> print (), ()# equivalent to (x), (x)如何比較分布本身和它的樣本的指標>>>=(x)>>> m, v, s, k = moments -mvsk')>>> n, (smin, smax), sm, sv,
34、 ss, sk>>>>>> print 'distribution:' ,distribution:>>> sstr = 'mean = % variance =% skew = % kurtosis =%>>> print sstr %m, v, s ,k)mean = , variance = , skew = , kurtosis =>>> print 'sample: ',sample:>>> print sstr %sm, sv, ss,
35、 sk)mean = , variance = , skew = , kurtosis =注意:用的是無偏的方差估計量,而卻用的是有偏的估計量。T檢驗和KS檢驗我們可以使用t檢驗是否樣本與給定均值(這里是理論均值)存在統計顯著差異。>>>>>> print 't-statistic =% pvalue = % % (x, m)t-statistic = pvalue =P值為,這代表第一類錯誤的概率,在例子中,為 10%我們不能拒絕“該樣本均值為 0”這個假設, 0是標準t分布的理論均值。 >>>>>> tt =
36、(sm - m)/ (sv / float (n)# t-statistic for mean>>> pval = n -1)*2 # two-sided pvalue = Prob(abs(t)>tt)>>> print 't-statistic =% pvalue = % %(tt, pval)t-statistic = pvalue =這里Kolmogorov-Smirnov檢馬敘(KS檢驗)被被用來檢驗樣本是否來自一個標準的t分布。>>>>>> print 'KS-statistic D =%
37、 pvalue = % %(x,'t' , ( 10,)KS-statistic D = pvalue =又一次得到了很高的P值。所以我們不能才1絕樣本是來自t分布的假設。在實際應用中,我們不能知 道潛在的分布到底是什么。如果我們使用KS檢驗我們的樣本對照正態分布,那么我們將也不能拒絕我們的樣本是來自正態分布的,在這種情況下P值為左右。>>>>>> print 'KS-statistic D =% pvalue = % %(x, 'norm')KS-statistic D = pvalue =無論如何,標準正態分布有1
38、的方差,當我們的樣本有時。如果我們標準化我們的樣本并且測試它比 照正態分布,那么P值將又一次很高我們將還是不能拒絕假設是來自正態分布的。>>>>>> d, pval = () / (), 'norm')>>> print 'KS-statistic D =% pvalue = % %(d, pval)KS-statistic D = pvalue =注釋:KS檢驗假設我們比照的分布就是以給定的參數確定的,但我們在最后估計了均值和方差,這 個假設就被違反了,故而這個測試統計量的P值是含偏的,這個用法是錯誤的。分布尾部最
39、后,我們可以檢查分布的右尾, 我們可以使用分位點函數 ppf,其為cdf函數的逆,來獲得臨界值, 或者更直接的,我們可以使用殘存函數的逆來辦。>>>>>> crit01, crit05, crit10=,10)>>> print 'critical values from ppf at 1%5 %and 10 % %(crit01, crit05, crit10)critical values from ppf at 1%, 5% and 10%>>> print 'critical values from
40、 isf at 1%5 %and 10 % % % tuple values from isf at 1%,5% and 10%>>>>>>freq01=(x>crit01)float100>>>freq05=(x>crit05)float100>>>freq10=(x>crit10)float100>>>print'sample %-frequency at 1%5 %and 10 %tail%(freq01, freq05, freq10)sample %-frequency
41、 at 1%, 5% and 10% tail在這三種情況中,我們的樣本有有一個更重的尾部,即實際在理論分界值右邊的概率要高于理論值。我們可以通過使用更大的樣本來獲得更好的擬合。在以下情況經驗頻率已經很接近理論概率了,但即使我們重復這個過程若干次,波動依然會保持在這個程度。>>>>>> freq05l = size =10000) > crit05) / * 100>>> print 'larger sample%requency at 5%ail%freq05llarger sample %-frequency at 5%
42、tail我們也可以比較它與正態分布的尾部,其有一個輕的多的尾部:>>>>>> print 'tail prob. of normal at 1%5 %and 10 % %.tuple crit05, crit10) *100)tail prob. of normal at 1%, 5% and 10%卡方檢驗可以被用來測試,是否一個有限的分類觀測值頻率與假定的理論概率分布具有顯著差異。>>>>>> quantiles =,>>> crit = 10)>>> print crit
43、-Inf-2.-1.-1. 1. 1.2. Inf> >> n_sample => >> freqcount = (x, bins =crit) 0> >> tprob = (quantiles)> >> nprob = tch, tpval = (freqcount, tprob *n_sample)> >> nch, npval = (freqcount, nprob *n_sample)> >> print 'chisquare for t: chi2 =% pvalue
44、= % %(tch, tpval)chisquare for t: chi2 = pvalue =chisquare for normal: chi2 = pvalue =我們看到當t分布檢驗沒被拒絕時標準正態分布卻被完全拒絕。在我們的樣本區分出這兩個分布后,我們可以先進行擬合確定scale與location再檢查擬合后的分布的差異性。我們可以先進行擬合,再用擬合分布而不是默認(起碼 location和scale是默認的)分布去進行檢 驗。>>>> >> tdof, tloc, tscale = nloc, nscale = tprob = tdof, 10
45、c =tloc, scale =tscale)> >> nprob = loc =nloc, scale =nscale)> >> tch, tpval= (freqcount, tprob* n_sample)> >> nch, npval= (freqcount, nprob*n_sample)> >> print'chisquare for t: chi2 =% pvalue = % %(tch, tpval)chisquare for t: chi2 = pvalue => >> prin
46、t'chisquare for normal: chi2 =% pvalue = % %(nch, npval)chisquare for normal: chi2 = pvalue =在經過參數調整之后,我們仍然可以以5%K平拒絕正態分布假設。然而卻以95%勺p值顯然的不能拒絕t分布。正態分布的特殊檢驗自從正態分布變為統計學中最常見的分布,就出現了大量的方法用來檢驗一個樣本是否可以被看成是 來自正態分布的。首先我們檢驗分布的峰度和偏度是否顯著地與正態分布的對應值相差異。>>>>>> print 'normal skewtest testst
47、at =% pvalue = % %(x)normal skewtest teststat = pvalue =>>> print 'normal kurtosistest teststat =% pvalue = % %(x)normal kurtosistest teststat = pvalue =將這兩個檢驗組合起來的正態性檢驗>>>> >> print 'normaltest teststat =% pvalue = % %(x)normaltest teststat = pvalue =在所有三個測試中,P值是非
48、常低的,所以我們可以拒絕我們的樣本的峰度與偏度與正態分布相同的 假設。當我們的樣本標準化之后,我們依舊得到相同的結果。>>>> >> print 'normaltest teststat =% pvalue = % %.()/()normaltest teststat = pvalue =因為正態性被很強的拒絕了,所以我們可以檢查這種檢驗方式是否可以有效地作用到其他情況中。>>>> >> print 'normaltest teststat =%pvalue = % % size =100)normalte
49、st teststat = pvalue =我們檢驗了小樣本的t分布樣本的觀測值以及一個大樣本的正態分布觀測值, 在這兩種情況中我們都 不能拒絕其來自正態分布的空假設。得到這樣的結果是因為前者是因為無法區分小樣本下的 t分布, 后者是因為它本來就來自正態分布。比較兩個樣本接下來,我們有兩個分布,其可以判定為相同或者來自不同的分布,以及我們希望測試是否這些樣本 有相同的統計特征。均值以相同的均值產生的樣本進行檢驗:>>>>>> rvsl = scale =10, size =500)>>> rvs2 = scale =10, size =50
50、0)>>> (rvsl, rvs2)以不同的均值產生的樣本進行檢驗:>>>>>> rvs3 = scale =10, size =500)>>> (rvsl, rvs3)對于兩個不同的樣本進行的 KS檢驗在這個例子中我們使用兩個同分布的樣本進行檢驗.設因為p值很高,毫不奇怪我們不能拒絕原假。>>>>>> (rvsl, rvs2)在第二個例子中,由于均值不同,所以我們可以拒絕空假設,由 P值小于1%>>>>>> (rvsl, rvs3)核密度估計一個常見
51、的統計學問題是從一個樣本中估計隨機變量的概率密度分布函數(PDF這個問題被稱為密度估計,對此最著名的工具是直方圖。直方圖是一個很好的可視化工具(主要是因為每個人都理解它) 但是對于對于數據特征的利用卻并不是非常有效率。核密度估計(KDE對于這個問題)是一個更有效的工具。這個gaussian kde估計方法可以被用來估計單元或多元數據的PDF它在數據呈單峰的時候工作的最好,但也可以在多峰情況下工作。單元估計我們以一個最小數據集來觀察gaussian kde是如何工作的,以及帶寬(bandwidth )的不同選擇方式。PDF對應的數據被以藍線的形式顯示在圖像的底端(被稱為毯圖( rug plot
52、)>>>>>> from scipy import stats>>> import as plt>>>>>> x1 = ( -7, -5, 1, 4, 5, dtype> >> kdel = (x1)> >> kde2 = (x1, bw_method -silverman' )>>>> >> fig =()> >> ax = ( 111)>>>> >> (x1, ,
53、9;b+' , ms =20)# rug plot> >> x_eval = ( -10, 10, num =200)> >> (x_eval, kde1(x_eval),'k-' , label ="Scott's Rule" )>>> (x_eval, kde1(x_eval),'r-' , label ="Silverman's Rule")>>>>>> ()(Source code )以及帶寬的選擇相比
54、較于數據的我們看到在Scott規則以及Silverman規則下的結果幾乎沒有差異。稀少顯得太寬。我們可以定義我們的帶寬函數以獲得一個更少平滑的結果>>>>>> def my_kde_bandwidth (obj, fac =1. / 5):"""We use Scott's Rule, multiplied by a constant factor."""return , -1. /+ 4) * fac>>>>>> fig=()>>> a
55、x=(111)>>>>>>(x1, ,'b+' , ms =20)# rug plot>>>kde3 = (x1, bw_method=my_kde_bandwidth)>>>(x_eval, kde3(x_eval),'g-' , label ="With smaller BW")>>>>>> ()(Source code )我們看到如果我們設置帶寬為非常狹窄,則獲得PDF的估計退化為圍繞在數據點的簡單的高斯和。我們現在使用更真實的例
56、子,并且看看在兩種帶寬選擇規則中的差異。這些規則被認為在正態分布上很好用,但即使是偏離正態的單峰分布上它也工作的很好。作為一個非正態分布,我們采用5自由度的t分布。import numpy as np import as pltfrom scipy import stats=# random data, normal distributionxs = () -1, () +1, 200)kdel = (x1)kde2 = (x1, bw_method ='silverman' )fig = (figsize =(8, 6)ax1 = ( 211)(x1, ,'b+
57、9; , ms =12) # rug plot(xs, kde1(xs),'k-' , label ="Scott's Rule" )(xs, kde2(xs),'b-' , label ="Silverman's Rule")(xs, 'r-', label ="True PDF")('x')('Density')("Normal (top) and Student's T$_df=5$ (bottom) distrib
58、utions")(loc =1)x2 = size =200) # random data, T distributionxs = () - 1, ()+ 1, 200)kde3 = (x2)kde4 = (x2, bw_method ='silverman' )ax2 = ( 212)(x2, ,'b+' , ms =12) # rug plot(xs, kde3(xs),'k-' , label ="Scott's Rule" )(xs, kde4(xs),'b-' , label =&q
59、uot;Silverman's Rule")(xs, 5), 'r-', label ="True PDF")('x')('Density')()(Source code )卜面我們看到這個一個寬一個窄的雙峰分布。可以想到結果將難達到以十分近似,因為每個峰需要不同的帶寬去擬合>>>>>>from functools import partial>>>>>>>>>>>>loci, scalel, sizelloc2, scale2, size2=(-2, 1, 175)=(2, ,50)x2 = ( scale =scale1, size =size1),scale=scale2, size =size2)>>>>>>x_eval = () - 1,()+ 1, 500)>>>>>>>>>>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中物理案例教學科學思維培養
- 橋頭飯堂管理辦法細則
- 幼兒園衛生保健人才隊伍建設與培訓體系
- 昭通盆景栽培管理辦法
- 機械作業安全管理
- 兼職講師管理辦法宣導
- 安全生產監督工作情況報告
- 安全生產法安全員配備
- 安全副總崗位責任制
- 安全十大重點隱患排查
- GB/T 307.4-2017滾動軸承推力軸承 產品幾何技術規范(GPS)和公差值
- GB 29415-2013耐火電纜槽盒
- 《密碼法》培訓只是講座PPT課件(帶內容)
- 建筑工程文件歸檔管理明細表
- 如何解讀血常規報告
- 區域消防安全風險評估規程DB50-T 1114-2021
- 免疫調節治療在腦卒中的運用課件
- 機關檔案管理工作培訓PPT課件
- 25T汽車吊檢驗報告
- 變頻空調中的永磁電機電感分析
- 高考常考語法填空詞性轉換匯總
評論
0/150
提交評論