如果隨機(jī)變量X的所有取值都可以逐個(gè)列舉出來,則稱X為離散型隨機(jī)變量。相應(yīng)的概率分布有二項(xiàng)分布,泊松分布。
站在用戶的角度思考問題,與客戶深入溝通,找到德清網(wǎng)站設(shè)計(jì)與德清網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋德清地區(qū)。
如果隨機(jī)變量X的所有取值無法逐個(gè)列舉出來,而是取數(shù)軸上某一區(qū)間內(nèi)的任一點(diǎn),則稱X為連續(xù)型隨機(jī)變量。相應(yīng)的概率分布有正態(tài)分布,均勻分布,指數(shù)分布,伽馬分布,偏態(tài)分布,卡方分布,beta分布等。(真多分布,好恐怖~~)
在離散型隨機(jī)變量X的一切可能值中,各可能值與其對應(yīng)概率的乘積之和稱為該隨機(jī)變量X的期望值,記作E(X) 。比如有隨機(jī)變量,取值依次為:2,2,2,4,5。求其平均值:(2+2+2+4+5)/5 = 3。
期望值也就是該隨機(jī)變量總體的均值。 推導(dǎo)過程如下:
= (2+2+2+4+5)/5
= 1/5 2 3 + 4/5 + 5/5
= 3/5 2 + 1/5 4 + 1/5 5
= 0.6 2 + 0.2 4 + 0.2 5
= 60% 2 + 20% 4 + 20%*5
= 1.2 + 0.8 + 1
= 3
倒數(shù)第三步可以解釋為值為2的數(shù)字出現(xiàn)的概率為60%,4的概率為20%,5的概率為20%。 所以E(X) = 60% 2 + 20% 4 + 20%*5 = μ = 3。
0-1分布(兩點(diǎn)分布),它的隨機(jī)變量的取值為1或0。即離散型隨機(jī)變量X的概率分布為:P{X=0} = 1-p, P{X=1} = p,即:
則稱隨機(jī)變量X服從參數(shù)為p的0-1分布,記作X~B(1,p)。
在生活中有很多例子服從兩點(diǎn)分布,比如投資是否中標(biāo),新生嬰兒是男孩還是女孩,檢查產(chǎn)品是否合格等等。
大家非常熟悉的拋硬幣試驗(yàn)對應(yīng)的分布就是二項(xiàng)分布。拋硬幣試驗(yàn)要么出現(xiàn)正面,要么就是反面,只包含這兩個(gè)結(jié)果。出現(xiàn)正面的次數(shù)是一個(gè)隨機(jī)變量,這種隨機(jī)變量所服從的概率分布通常稱為 二項(xiàng)分布 。
像拋硬幣這類試驗(yàn)所具有的共同性質(zhì)總結(jié)如下:(以拋硬幣為例)
通常稱具有上述特征的n次重復(fù)獨(dú)立試驗(yàn)為n重伯努利試驗(yàn)。簡稱伯努利試驗(yàn)或伯努利試驗(yàn)概型。特別地,當(dāng)試驗(yàn)次數(shù)為1時(shí),二項(xiàng)分布服從0-1分布(兩點(diǎn)分布)。
舉個(gè)栗子:拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率 。
已知p = 0.5 (出現(xiàn)正面的概率) ,n = 3 ,k = 2
所以拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率為3/8。
二項(xiàng)分布的期望值和方差 分別為:
泊松分布是用來描述在一 指定時(shí)間范圍內(nèi)或在指定的面積或體積之內(nèi)某一事件出現(xiàn)的次數(shù)的分布 。生活中服從泊松分布的例子比如有每天房產(chǎn)中介接待的客戶數(shù),某微博每月出現(xiàn)服務(wù)器癱瘓的次數(shù)等等。 泊松分布的公式為 :
其中 λ 為給定的時(shí)間間隔內(nèi)事件的平均數(shù),λ = np。e為一個(gè)數(shù)學(xué)常數(shù),一個(gè)無限不循環(huán)小數(shù),其值約為2.71828。
泊松分布的期望值和方差 分別為:
使用Python繪制泊松分布的概率分布圖:
因?yàn)檫B續(xù)型隨機(jī)變量可以取某一區(qū)間或整個(gè)實(shí)數(shù)軸上的任意一個(gè)值,所以通常用一個(gè)函數(shù)f(x)來表示連續(xù)型隨機(jī)變量,而f(x)就稱為 概率密度函數(shù) 。
概率密度函數(shù)f(x)具有如下性質(zhì) :
需要注意的是,f(x)不是一個(gè)概率,即f(x) ≠ P(X = x) 。在連續(xù)分布的情況下,隨機(jī)變量X在a與b之間的概率可以寫成:
正態(tài)分布(或高斯分布)是連續(xù)型隨機(jī)變量的最重要也是最常見的分布,比如學(xué)生的考試成績就呈現(xiàn)出正態(tài)分布的特征,大部分成績集中在某個(gè)范圍(比如60-80分),很小一部分往兩端傾斜(比如50分以下和90多分以上)。還有人的身高等等。
正態(tài)分布的定義 :
如果隨機(jī)變量X的概率密度為( -∞x+∞):
則稱X服從正態(tài)分布,記作X~N(μ,σ2)。其中-∞μ+∞,σ0, μ為隨機(jī)變量X的均值,σ為隨機(jī)變量X的標(biāo)準(zhǔn)差。 正態(tài)分布的分布函數(shù)
正態(tài)分布的圖形特點(diǎn) :
使用Python繪制正態(tài)分布的概率分布圖:
正態(tài)分布有一個(gè)3σ準(zhǔn)則,即數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6827,分布在(μ-2σ,μ+2σ)中的概率為0.9545,分布在(μ-3σ,μ+3σ)中的概率為0.9973,也就是說大部分?jǐn)?shù)值是分布在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個(gè)范圍的可能性很小很小,僅占不到0.3%,屬于極個(gè)別的小概率事件,所以3σ準(zhǔn)則可以用來檢測異常值。
當(dāng)μ=0,σ=1時(shí),有
此時(shí)的正態(tài)分布N(0,1) 稱為標(biāo)準(zhǔn)正態(tài)分布。因?yàn)棣?,σ都是確定的取值,所以其對應(yīng)的概率密度曲線是一條 形態(tài)固定 的曲線。
對標(biāo)準(zhǔn)正態(tài)分布,通常用φ(x)表示概率密度函數(shù),用Φ(x)表示分布函數(shù):
假設(shè)有一次物理考試特別難,滿分100分,全班只有大概20個(gè)人及格。與此同時(shí)語文考試很簡單,全班絕大部分都考了90分以上。小明的物理和語文分別考了60分和80分,他回家后告訴家長,這時(shí)家長能僅僅從兩科科目的分值直接判斷出這次小明的語文成績要比物理好很多嗎?如果不能,應(yīng)該如何判斷呢?此時(shí)Z-score就派上用場了。 Z-Score的計(jì)算定義 :
即 將隨機(jī)變量X先減去總體樣本均值,再除以總體樣本標(biāo)準(zhǔn)差就得到標(biāo)準(zhǔn)分?jǐn)?shù)啦。如果X低于平均值,則Z為負(fù)數(shù),反之為正數(shù) 。通過計(jì)算標(biāo)準(zhǔn)分?jǐn)?shù),可以將任何一個(gè)一般的正態(tài)分布轉(zhuǎn)化為標(biāo)準(zhǔn)正態(tài)分布。
小明家長從老師那得知物理的全班平均成績?yōu)?0分,標(biāo)準(zhǔn)差為10,而語文的平均成績?yōu)?2分,標(biāo)準(zhǔn)差為4。分別計(jì)算兩科成績的標(biāo)準(zhǔn)分?jǐn)?shù):
物理:標(biāo)準(zhǔn)分?jǐn)?shù) = (60-40)/10 = 2
語文:標(biāo)準(zhǔn)分?jǐn)?shù) = (85-95)/4 = -2.5
從計(jì)算結(jié)果來看,說明這次考試小明的物理成績在全部同學(xué)中算是考得很不錯(cuò)的,而語文考得很差。
指數(shù)分布可能容易和前面的泊松分布混淆,泊松分布強(qiáng)調(diào)的是某段時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù)的概率分布,而指數(shù)分布說的是 隨機(jī)事件發(fā)生的時(shí)間間隔 的概率分布。比如一班地鐵進(jìn)站的間隔時(shí)間。如果隨機(jī)變量X的概率密度為:
則稱X服從指數(shù)分布,其中的參數(shù)λ0。 對應(yīng)的分布函數(shù) 為:
均勻分布的期望值和方差 分別為:
使用Python繪制指數(shù)分布的概率分布圖:
均勻分布有兩種,分為 離散型均勻分布和連續(xù)型均勻分布 。其中離散型均勻分布最常見的例子就是拋擲骰子啦。拋擲骰子出現(xiàn)的點(diǎn)數(shù)就是一個(gè)離散型隨機(jī)變量,點(diǎn)數(shù)可能有1,2,3,4,5,6。每個(gè)數(shù)出現(xiàn)的概率都是1/6。
設(shè)連續(xù)型隨機(jī)變量X具有概率密度函數(shù):
則稱X服從區(qū)間(a,b)上的均勻分布。X在等長度的子區(qū)間內(nèi)取值的概率相同。對應(yīng)的分布函數(shù)為:
f(x)和F(x)的圖形分別如下圖所示:
均勻分布的期望值和方差 分別為:
python中range()函數(shù)的用法:
(1)range(stop)
創(chuàng)建一個(gè)(0,stop)之間的整數(shù)序列,步長為1。
(2)range(start,stop)
創(chuàng)建一個(gè)(start,stop)之間的整數(shù)序列,步長為1。
(3)range(start,stop,step)
創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為step。
參數(shù)介紹:
start:表示從返回序列的起始編號,默認(rèn)情況下從0開始。
stop:表示生成最多但不包括此數(shù)字的數(shù)字。
step:指的是序列中每個(gè)數(shù)字之間的差異,默認(rèn)值為1。
相關(guān)介紹
range()是Python的內(nèi)置函數(shù),在用戶需要執(zhí)行特定次數(shù)的操作時(shí)使用它,表示循環(huán)的意思。內(nèi)置函數(shù)range()可用于以列表的形式生成數(shù)字序列。在range()函數(shù)中最常見用法是使用for和while循環(huán)迭代序列類型(List,string等)。
簡單的來說,range()函數(shù)允許用戶在給定范圍內(nèi)生成一系列數(shù)字。根據(jù)用戶傳遞給函數(shù)的參數(shù)數(shù)量,用戶可以決定該系列數(shù)字的開始和結(jié)束位置以及一個(gè)數(shù)字與下一個(gè)數(shù)字之間的差異有多大。
徑向分布函數(shù)通常指的是給定某個(gè)粒子的坐標(biāo),其他粒子在空間的分布幾率(離給定粒子多遠(yuǎn))。所以徑向分布函數(shù)既可以用來研究物質(zhì)的有序性,也可以用來描述電子的相關(guān)性。
徑向基(RBF)神經(jīng)網(wǎng)絡(luò)python實(shí)現(xiàn)
1 from numpy import array, append, vstack, transpose, reshape, \
2 ? ? ? ? ? ? ? ? ? dot, true_divide, mean, exp, sqrt, log, \
3 ? ? ? ? ? ? ? ? ? loadtxt, savetxt, zeros, frombuffer
4 from numpy.linalg import norm, lstsq
5 from multiprocessing import Process, Array
6 from random import sample
7 from time import time
8 from sys import stdout
9 from ctypes import c_double
10 from h5py import File
11
12
13 def metrics(a, b):
14 ? ? return norm(a - b)
15
16
17 def gaussian (x, mu, sigma):
18 ? ? return exp(- metrics(mu, x)**2 / (2 * sigma**2))
21 def multiQuadric (x, mu, sigma):
22 ? ? return pow(metrics(mu,x)**2 + sigma**2, 0.5)
23
24
25 def invMultiQuadric (x, mu, sigma):
26 ? ? return pow(metrics(mu,x)**2 + sigma**2, -0.5)
27
28
29 def plateSpine (x,mu):
30 ? ? r = metrics(mu,x)
31 ? ? return (r**2) * log(r)
32
33
34 class Rbf:
35 ? ? def __init__(self, prefix = 'rbf', workers = 4, extra_neurons = 0, from_files = None):
36 ? ? ? ? self.prefix = prefix
37 ? ? ? ? self.workers = workers
38 ? ? ? ? self.extra_neurons = extra_neurons
39
40 ? ? ? ? # Import partial model
41 ? ? ? ? if from_files is not None: ? ? ? ? ?
42 ? ? ? ? ? ? w_handle = self.w_handle = File(from_files['w'], 'r')
43 ? ? ? ? ? ? mu_handle = self.mu_handle = File(from_files['mu'], 'r')
44 ? ? ? ? ? ? sigma_handle = self.sigma_handle = File(from_files['sigma'], 'r')
45 ? ? ? ? ?
46 ? ? ? ? ? ? self.w = w_handle['w']
47 ? ? ? ? ? ? self.mu = mu_handle['mu']
48 ? ? ? ? ? ? self.sigmas = sigma_handle['sigmas']
49 ? ? ? ? ?
50 ? ? ? ? ? ? self.neurons = self.sigmas.shape[0]
51
52 ? ? def _calculate_error(self, y):
53 ? ? ? ? self.error = mean(abs(self.os - y))
54 ? ? ? ? self.relative_error = true_divide(self.error, mean(y))
55
56 ? ? def _generate_mu(self, x):
57 ? ? ? ? n = self.n
58 ? ? ? ? extra_neurons = self.extra_neurons
59
60 ? ? ? ? # TODO: Make reusable
61 ? ? ? ? mu_clusters = loadtxt('clusters100.txt', delimiter='\t')
62
63 ? ? ? ? mu_indices = sample(range(n), extra_neurons)
64 ? ? ? ? mu_new = x[mu_indices, :]
65 ? ? ? ? mu = vstack((mu_clusters, mu_new))
66
67 ? ? ? ? return mu
68
69 ? ? def _calculate_sigmas(self):
70 ? ? ? ? neurons = self.neurons
71 ? ? ? ? mu = self.mu
72
73 ? ? ? ? sigmas = zeros((neurons, ))
74 ? ? ? ? for i in xrange(neurons):
75 ? ? ? ? ? ? dists = [0 for _ in xrange(neurons)]
76 ? ? ? ? ? ? for j in xrange(neurons):
77 ? ? ? ? ? ? ? ? if i != j:
78 ? ? ? ? ? ? ? ? ? ? dists[j] = metrics(mu[i], mu[j])
79 ? ? ? ? ? ? sigmas[i] = mean(dists)* 2
80 ? ? ? ? ? ? ? ? ? ? ? # max(dists) / sqrt(neurons * 2))
81 ? ? ? ? return sigmas
82
83 ? ? def _calculate_phi(self, x):
84 ? ? ? ? C = self.workers
85 ? ? ? ? neurons = self.neurons
86 ? ? ? ? mu = self.mu
87 ? ? ? ? sigmas = self.sigmas
88 ? ? ? ? phi = self.phi = None
89 ? ? ? ? n = self.n
90
91
92 ? ? ? ? def heavy_lifting(c, phi):
93 ? ? ? ? ? ? s = jobs[c][1] - jobs[c][0]
94 ? ? ? ? ? ? for k, i in enumerate(xrange(jobs[c][0], jobs[c][1])):
95 ? ? ? ? ? ? ? ? for j in xrange(neurons):
96 ? ? ? ? ? ? ? ? ? ? # phi[i, j] = metrics(x[i,:], mu[j])**3)
97 ? ? ? ? ? ? ? ? ? ? # phi[i, j] = plateSpine(x[i,:], mu[j]))
98 ? ? ? ? ? ? ? ? ? ? # phi[i, j] = invMultiQuadric(x[i,:], mu[j], sigmas[j]))
99 ? ? ? ? ? ? ? ? ? ? phi[i, j] = multiQuadric(x[i,:], mu[j], sigmas[j])
100 ? ? ? ? ? ? ? ? ? ? # phi[i, j] = gaussian(x[i,:], mu[j], sigmas[j]))
101 ? ? ? ? ? ? ? ? if k % 1000 == 0:
102 ? ? ? ? ? ? ? ? ? ? percent = true_divide(k, s)*100
103 ? ? ? ? ? ? ? ? ? ? print(c, ': {:2.2f}%'.format(percent))
104 ? ? ? ? ? ? print(c, ': Done')
105 ? ? ?
106 ? ? ? ? # distributing the work between 4 workers
107 ? ? ? ? shared_array = Array(c_double, n * neurons)
108 ? ? ? ? phi = frombuffer(shared_array.get_obj())
109 ? ? ? ? phi = phi.reshape((n, neurons))
110
111 ? ? ? ? jobs = []
112 ? ? ? ? workers = []
113
114 ? ? ? ? p = n / C
115 ? ? ? ? m = n % C
116 ? ? ? ? for c in range(C):
117 ? ? ? ? ? ? jobs.append((c*p, (c+1)*p + (m if c == C-1 else 0)))
118 ? ? ? ? ? ? worker = Process(target = heavy_lifting, args = (c, phi))
119 ? ? ? ? ? ? workers.append(worker)
120 ? ? ? ? ? ? worker.start()
121
122 ? ? ? ? for worker in workers:
123 ? ? ? ? ? ? worker.join()
124
125 ? ? ? ? return phi
126
127 ? ? def _do_algebra(self, y):
128 ? ? ? ? phi = self.phi
129
130 ? ? ? ? w = lstsq(phi, y)[0]
131 ? ? ? ? os = dot(w, transpose(phi))
132 ? ? ? ? return w, os
133 ? ? ? ? # Saving to HDF5
134 ? ? ? ? os_h5 = os_handle.create_dataset('os', data = os)
135
136 ? ? def train(self, x, y):
137 ? ? ? ? self.n = x.shape[0]
138
139 ? ? ? ? ## Initialize HDF5 caches
140 ? ? ? ? prefix = self.prefix
141 ? ? ? ? postfix = str(self.n) + '-' + str(self.extra_neurons) + '.hdf5'
142 ? ? ? ? name_template = prefix + '-{}-' + postfix
143 ? ? ? ? phi_handle = self.phi_handle = File(name_template.format('phi'), 'w')
144 ? ? ? ? os_handle = self.w_handle = File(name_template.format('os'), 'w')
145 ? ? ? ? w_handle = self.w_handle = File(name_template.format('w'), 'w')
146 ? ? ? ? mu_handle = self.mu_handle = File(name_template.format('mu'), 'w')
147 ? ? ? ? sigma_handle = self.sigma_handle = File(name_template.format('sigma'), 'w')
148
149 ? ? ? ? ## Mu generation
150 ? ? ? ? mu = self.mu = self._generate_mu(x)
151 ? ? ? ? self.neurons = mu.shape[0]
152 ? ? ? ? print('({} neurons)'.format(self.neurons))
153 ? ? ? ? # Save to HDF5
154 ? ? ? ? mu_h5 = mu_handle.create_dataset('mu', data = mu)
155
156 ? ? ? ? ## Sigma calculation
157 ? ? ? ? print('Calculating Sigma...')
158 ? ? ? ? sigmas = self.sigmas = self._calculate_sigmas()
159 ? ? ? ? # Save to HDF5
160 ? ? ? ? sigmas_h5 = sigma_handle.create_dataset('sigmas', data = sigmas)
161 ? ? ? ? print('Done')
162
163 ? ? ? ? ## Phi calculation
164 ? ? ? ? print('Calculating Phi...')
165 ? ? ? ? phi = self.phi = self._calculate_phi(x)
166 ? ? ? ? print('Done')
167 ? ? ? ? # Saving to HDF5
168 ? ? ? ? print('Serializing...')
169 ? ? ? ? phi_h5 = phi_handle.create_dataset('phi', data = phi)
170 ? ? ? ? del phi
171 ? ? ? ? self.phi = phi_h5
172 ? ? ? ? print('Done')
173
174 ? ? ? ? ## Algebra
175 ? ? ? ? print('Doing final algebra...')
176 ? ? ? ? w, os = self.w, _ = self._do_algebra(y)
177 ? ? ? ? # Saving to HDF5
178 ? ? ? ? w_h5 = w_handle.create_dataset('w', data = w)
179 ? ? ? ? os_h5 = os_handle.create_dataset('os', data = os)
180
181 ? ? ? ? ## Calculate error
182 ? ? ? ? self._calculate_error(y)
183 ? ? ? ? print('Done')
184
185 ? ? def predict(self, test_data):
186 ? ? ? ? mu = self.mu = self.mu.value
187 ? ? ? ? sigmas = self.sigmas = self.sigmas.value
188 ? ? ? ? w = self.w = self.w.value
189
190 ? ? ? ? print('Calculating phi for test data...')
191 ? ? ? ? phi = self._calculate_phi(test_data)
192 ? ? ? ? os = dot(w, transpose(phi))
193 ? ? ? ? savetxt('iok3834.txt', os, delimiter='\n')
194 ? ? ? ? return os
195
196 ? ? @property
197 ? ? def summary(self):
198 ? ? ? ? return '\n'.join( \
199 ? ? ? ? ? ? ['-----------------',
200 ? ? ? ? ? ? 'Training set size: {}'.format(self.n),
201 ? ? ? ? ? ? 'Hidden layer size: {}'.format(self.neurons),
202 ? ? ? ? ? ? '-----------------',
203 ? ? ? ? ? ? 'Absolute error ? : {:02.2f}'.format(self.error),
204 ? ? ? ? ? ? 'Relative error ? : {:02.2f}%'.format(self.relative_error * 100)])
205
206
207 def predict(test_data):
208 ? ? mu = File('rbf-mu-212243-2400.hdf5', 'r')['mu'].value
209 ? ? sigmas = File('rbf-sigma-212243-2400.hdf5', 'r')['sigmas'].value
210 ? ? w = File('rbf-w-212243-2400.hdf5', 'r')['w'].value
211
212 ? ? n = test_data.shape[0]
213 ? ? neur = mu.shape[0]
214 ?
215 ? ? mu = transpose(mu)
216 ? ? mu.reshape((n, neur))
217
218 ? ? phi = zeros((n, neur))
219 ? ? for i in range(n):
220 ? ? ? ? for j in range(neur):
221 ? ? ? ? ? ? phi[i, j] = multiQuadric(test_data[i,:], mu[j], sigmas[j])
222
223 ? ? os = dot(w, transpose(phi))
224 ? ? savetxt('iok3834.txt', os, delimiter='\n')
225 ? ? return os
R編程語言已經(jīng)成為統(tǒng)計(jì)分析中的事實(shí)標(biāo)準(zhǔn)。但在這篇文章中,我將告訴你在Python中實(shí)現(xiàn)統(tǒng)計(jì)學(xué)概念會(huì)是如此容易。我要使用Python實(shí)現(xiàn)一些離散和連續(xù)的概率分布。雖然我不會(huì)討論這些分布的數(shù)學(xué)細(xì)節(jié),但我會(huì)以鏈接的方式給你一些學(xué)習(xí)這些統(tǒng)計(jì)學(xué)概念的好資料。在討論這些概率分布之前,我想簡單說說什么是隨機(jī)變量(random variable)。隨機(jī)變量是對一次試驗(yàn)結(jié)果的量化。
舉個(gè)例子,一個(gè)表示拋硬幣結(jié)果的隨機(jī)變量可以表示成
Python
1
2
X = {1 如果正面朝上,
2 如果反面朝上}
隨機(jī)變量是一個(gè)變量,它取值于一組可能的值(離散或連續(xù)的),并服從某種隨機(jī)性。隨機(jī)變量的每個(gè)可能取值的都與一個(gè)概率相關(guān)聯(lián)。隨機(jī)變量的所有可能取值和與之相關(guān)聯(lián)的概率就被稱為概率分布(probability distributrion)。
我鼓勵(lì)大家仔細(xì)研究一下scipy.stats模塊。
概率分布有兩種類型:離散(discrete)概率分布和連續(xù)(continuous)概率分布。
離散概率分布也稱為概率質(zhì)量函數(shù)(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項(xiàng)分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。
連續(xù)概率分布也稱為概率密度函數(shù)(probability density function),它們是具有連續(xù)取值(例如一條實(shí)線上的值)的函數(shù)。正態(tài)分布(normal distribution)、指數(shù)分布(exponential distribution)和β分布(beta distribution)等都屬于連續(xù)概率分布。
若想了解更多關(guān)于離散和連續(xù)隨機(jī)變量的知識(shí),你可以觀看可汗學(xué)院關(guān)于概率分布的視頻。
二項(xiàng)分布(Binomial Distribution)
服從二項(xiàng)分布的隨機(jī)變量X表示在n個(gè)獨(dú)立的是/非試驗(yàn)中成功的次數(shù),其中每次試驗(yàn)的成功概率為p。
E(X) =?np, Var(X) =?np(1?p)
如果你想知道每個(gè)函數(shù)的原理,你可以在IPython筆記本中使用help file命令。?E(X)表示分布的期望或平均值。
鍵入stats.binom?了解二項(xiàng)分布函數(shù)binom的更多信息。
二項(xiàng)分布的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?
假設(shè)在該試驗(yàn)中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結(jié)果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計(jì)算每次觀測的概率質(zhì)量函數(shù)。它返回一個(gè)含有11個(gè)元素的列表(list),這些元素表示與每個(gè)觀測相關(guān)聯(lián)的概率值。
您可以使用.rvs函數(shù)模擬一個(gè)二項(xiàng)隨機(jī)變量,其中參數(shù)size指定你要進(jìn)行模擬的次數(shù)。我讓Python返回10000個(gè)參數(shù)為n和p的二項(xiàng)式隨機(jī)變量。我將輸出這些隨機(jī)變量的平均值和標(biāo)準(zhǔn)差,然后畫出所有的隨機(jī)變量的直方圖。
泊松分布(Poisson Distribution)
一個(gè)服從泊松分布的隨機(jī)變量X,表示在具有比率參數(shù)(rate parameter)λ的一段固定時(shí)間間隔內(nèi),事件發(fā)生的次數(shù)。參數(shù)λ告訴你該事件發(fā)生的比率。隨機(jī)變量X的平均值和方差都是λ。
E(X) =?λ, Var(X) =?λ
泊松分布的例子:已知某路口發(fā)生事故的比率是每天2次,那么在此處一天內(nèi)發(fā)生4次事故的概率是多少?
讓我們考慮這個(gè)平均每天發(fā)生2起事故的例子。泊松分布的實(shí)現(xiàn)和二項(xiàng)分布有些類似,在泊松分布中我們需要指定比率參數(shù)。泊松分布的輸出是一個(gè)數(shù)列,包含了發(fā)生0次、1次、2次,直到10次事故的概率。我用結(jié)果生成了以下圖片。
你可以看到,事故次數(shù)的峰值在均值附近。平均來說,你可以預(yù)計(jì)事件發(fā)生的次數(shù)為λ。嘗試不同的λ和n的值,然后看看分布的形狀是怎么變化的。
現(xiàn)在我來模擬1000個(gè)服從泊松分布的隨機(jī)變量。
正態(tài)分布(Normal Distribution)
正態(tài)分布是一種連續(xù)分布,其函數(shù)可以在實(shí)線上的任何地方取值。正態(tài)分布由兩個(gè)參數(shù)描述:分布的平均值μ和方差σ2?。
E(X) =?μ, Var(X) =?σ2
正態(tài)分布的取值可以從負(fù)無窮到正無窮。你可以注意到,我用stats.norm.pdf得到正態(tài)分布的概率密度函數(shù)。
β分布(Beta Distribution)
β分布是一個(gè)取值在?[0, 1]?之間的連續(xù)分布,它由兩個(gè)形態(tài)參數(shù)α和β的取值所刻畫。
β分布的形狀取決于α和β的值。貝葉斯分析中大量使用了β分布。
當(dāng)你將參數(shù)α和β都設(shè)置為1時(shí),該分布又被稱為均勻分布(uniform distribution)。嘗試不同的α和β取值,看看分布的形狀是如何變化的。
指數(shù)分布(Exponential Distribution)
指數(shù)分布是一種連續(xù)概率分布,用于表示獨(dú)立隨機(jī)事件發(fā)生的時(shí)間間隔。比如旅客進(jìn)入機(jī)場的時(shí)間間隔、打進(jìn)客服中心電話的時(shí)間間隔、中文維基百科新條目出現(xiàn)的時(shí)間間隔等等。
我將參數(shù)λ設(shè)置為0.5,并將x的取值范圍設(shè)置為 $[0, 15]$ 。
接著,我在指數(shù)分布下模擬1000個(gè)隨機(jī)變量。scale參數(shù)表示λ的倒數(shù)。函數(shù)np.std中,參數(shù)ddof等于標(biāo)準(zhǔn)偏差除以 $n-1$ 的值。
結(jié)語(Conclusion)
概率分布就像蓋房子的藍(lán)圖,而隨機(jī)變量是對試驗(yàn)事件的總結(jié)。我建議你去看看哈佛大學(xué)數(shù)據(jù)科學(xué)課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關(guān)于統(tǒng)計(jì)模型和分布的全部。
當(dāng)前題目:python徑向分布函數(shù),徑向分布函數(shù)怎么理解
鏈接地址:http://chinadenli.net/article22/hegsjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、靜態(tài)網(wǎng)站、微信小程序、軟件開發(fā)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)