python實現常見一元隨機變量的概率分布

一. 隨機變量

隨機變量是一個從樣本空間 Ω \Omega Ω到實數空間 R R R的函數,比如隨機變量 X X X可以表示投骰子的點數。隨機變量一般可以分為兩類:

  • 離散型隨機變量:隨機變量的取值為有限個。
  • 連續型隨機變量:隨機變量的取值是連續的,有無限多個。

scipy.stat模塊中包含了多種概率分布的隨機變量,包含離散型隨機變量和連續型隨機變量。離散型隨機變量的常見接口如下:

方法名功能
rvs生成該分布的隨機序列
pmf概率質量函數
cdf累計概率分布函數
stats計算該分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]

連續型隨機變量的常見接口如下:

方法名功能
rvs生成該分布的隨機序列
pdf概率密度函數
cdf累計概率分布函數
stats計算該分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]
二. 常見離散分布
1. 二項分布

如果隨機變量 X X X的分布律為 P ( X = k ) = C n k p k q n ? k , k = 0 , 1 , . . . n , P(X=k) = C^k_np^kq^{n-k},k = 0,1,...n, P(X=k)=Cnk?pkqn?kk=0,1,...n其中 p + q = 1 p + q = 1 p+q=1 ,則稱 X X X服從參數為 n , p n,p n,p的二項分布,記為 X ~ B ( n , p ) X \sim B(n,p) XB(n,p)

  • 期望: E ( X ) = n p E(X) = np E(X)=np
  • 方差: D ( X ) = n p ( 1 ? p ) D(X) = np(1 - p) D(X)=np(1?p)
  1. 畫出不同參數下的二項分布, n , p n, p n,p分別為 ( 10 , 0.3 ) , ( 10 , 0.5 ) , ( 10 , 0.7 ) (10,0.3),(10,0.5),(10,0.7) (100.3),100.5,100.7

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [(10, 0.3), (10, 0.5), (10, 0.7)]for i in range(len(params)):n = params[i][0]p = params[i][1]x = np.arange(0, n + 1)y = binom(n, p).pmf(x)# 計算隨機變量的期望,方差mean, var = binom.stats(n, p, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('n = {}, p = {}'.format(n, p))ax[i].set_xticks(x)ax[i].text(1, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

  2. 生成服從不同參數二項分布的隨機數組(采樣100000次),然后查看數組的頻率分布

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [(10, 0.3), (10, 0.5), (10, 0.7)]for i in range(len(params)):n = params[i][0]p = params[i][1]x = np.arange(0, 11)# 抽樣10萬次sample = binom.rvs(n = n, p = p, size = 100000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('n = {}, p = {}'.format(n, p))ax[i].set_xticks(x)ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

2. 幾何分布

若隨機變量 X X X的分布律為 P ( X = k ) = ( 1 ? p ) k ? 1 p , k = 1 , 2 , . . . , P(X = k) = (1 - p)^{k - 1}p,k = 1, 2, ..., P(X=k)=(1?p)k?1pk=1,2,...其中 0 < p < 1 0 < p < 1 0<p<1,則稱 X X X服從參數為 p p p的幾何分布,記為 X ~ G e ( p ) X \sim Ge(p) XGe(p)

  • 期望: E ( X ) = 1 p E(X) = \frac{1}{p} E(X)=p1?
  • 方差: D ( X ) = 1 ? p p 2 D(X) = \frac{1 - p}{p^2} D(X)=p21?p?
  1. 畫出不同參數下的幾何分布, p p p分別為 ( 0.3 , 0.5 , 0.7 ) (0.3,0.5,0.7) (0.30.50.7)

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [0.3,0.5,0.7]for i in range(len(params)):p = params[i]x = np.arange(1, 15)y = geom(p = p).pmf(x)print(y)# 計算隨機變量的期望,方差mean, var = geom.stats(p = p, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('p = {}'.format(p))ax[i].set_xticks(x)ax[i].text(5, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

  2. 生成服從不同參數幾何分布的隨機數組(采樣100000次),然后查看數組的頻率分布

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [0.3, 0.5, 0.7]for i in range(len(params)):p = params[i]x = np.arange(0, 15)# 抽樣sample = geom.rvs(p = p, size = 100000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('p = {}'.format(p))ax[i].set_xlim(0,15)ax[i].set_xticks(x)ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

3. 泊松分布

若隨機變量 X X X的分布律為 P ( X = k ) = λ k k ! e ? λ , k = 0 , 1 , 2... , P(X=k) = \frac{\lambda^k}{k!}e^{-\lambda},k = 0, 1, 2 ..., P(X=k)=k!λk?e?λk=0,1,2...其中 λ > 0 , \lambda > 0, λ>0則稱 X X X服從參數為 λ \lambda λ的泊松分布,記為 X ~ P ( λ ) X \sim P(\lambda) XP(λ)

  • 期望: E ( X ) = λ E(X) = \lambda E(X)=λ
  • 方差: D ( X ) = λ D(X) = \lambda D(X)=λ
  1. 畫出不同參數下的泊松分布, λ \lambda λ分別為 ( 2 , 6 , 8 ) (2,6,8) (2,6,8)

    import numpy as np
    from scipy.stats import poisson
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [2,6,8]for i in range(len(params)):numda = params[i]x = np.arange(1, 15)y = poisson(numda).pmf(x)# 計算隨機變量的期望,方差mean, var = poisson.stats(numda, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('lambda = {}'.format(numda))ax[i].set_xticks(x)ax[i].set_yticks([0, 0.1, 0.2, 0.3, 0.4])ax[i].text(5, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

  2. 生成服從不同參數泊松分布的隨機數組(采樣100000次),然后查看數組的頻率分布

    import numpy as np
    from scipy.stats import poisson
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 調整子圖間距fig.subplots_adjust(hspace = 0.5)params = [2, 6, 8]for i in range(len(params)):numda = params[i]x = np.arange(0, 16)# 抽樣sample = poisson.rvs(numda, size = 1000000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('lamdba = {}'.format(numda))ax[i].set_xticks(x)ax[i].set_xlim(0, 16)ax[i].grid()plt.show()
    

    運行結果:
    在這里插入圖片描述

三. 常見連續分布
1. 正太分布

若隨機變量 X X X的概率密度函數為 f ( x ) = 1 2 π δ e ? ( x ? μ ) 2 2 δ 2 , ( ? ∞ < x < + ∞ ) f(x) = \frac{1}{\sqrt{2\pi}\delta}e^{- \frac{(x - \mu)^2}{2\delta^2}},( -\infty< x < +\infty) f(x)=2π ?δ1?e?2δ2(x?μ)2?(?<x<+),則稱 X X X服從參數為 ( μ , δ 2 ) (\mu,\delta^2) (μδ2)的正太分布,記為 X ~ N ( μ , δ 2 ) X \sim N(\mu,\delta^2) XN(μδ2)。當 μ = 0 , δ = 1 \mu =0,\delta = 1 μ=0δ=1時稱 X X X服從標準正太分布。

  • 期望: E ( X ) = μ E(X) = \mu E(X)=μ
  • 方差: D ( X ) = δ 2 D(X) = \delta^2 D(X)=δ2
  1. 畫出不同參數下的正太分布, μ , δ \mu,\delta μδ分別為 ( 0 , 1 ) , ( 0 , 3 ) (0, 1), (0, 3) (0,1),(0,3)

    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(figsize=(10, 8))params = [(0, 1, 'red'), (0, 3, 'blue')]x = np.linspace(-20, 20, 1000)for i in range(0, len(params)):loc = params[i][0]scale = params[i][1]color = params[i][2]mean, var = norm.stats(loc, scale, moments='mv')ax.plot(x, norm(loc = loc, scale = scale).pdf(x), color = color, label = 'loc={},scale={},均值={},方差={}'.format(loc, scale,mean,var))ax.set_xticks(np.arange(-20, 21))ax.grid()ax.legend()plt.show()
    
  2. 生成服從不同參數正太分布的隨機數組(采樣100000次),然后查看數組的頻率分布

    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(2, 1, figsize=(10, 8))params = [(0, 1, 'red'), (0, 3, 'blue')]x = np.linspace(-20, 20, 1000)# 采樣for i in range(0, len(params)):loc = params[i][0]scale = params[i][1]color = params[i][2]# 畫出分布圖ax[i].plot(x, norm(loc = loc, scale = scale).pdf(x), color = color, label = 'loc={},scale={}'.format(loc, scale))# 畫出隨機抽樣的頻率分布直方圖ax[i].hist(norm(loc = loc, scale = scale).rvs(size = 100000), density=True, bins = 100)ax[i].set_xticks(np.arange(-20, 21))ax[i].grid()ax[i].legend()plt.show()
    
2. 指數分布

若隨機變量 X X X的概率密度函數為 f ( x ) = { λ e ? λ x x ≥ 0 0 x < 0 ( λ > 0 ) f(x) = \begin{cases} {\lambda}e^{-{\lambda}x} & x \ge 0\\0 & x < 0\end{cases} (\lambda > 0) f(x)={λe?λx0?x0x<0?(λ>0),則稱 X X X服從參數為 λ \lambda λ的指數分布,記為 X ~ E ( λ ) X \sim E(\lambda) XE(λ)

  • 期望: E ( X ) = 1 λ E(X) = \frac{1}{\lambda} E(X)=λ1?
  • 方差: D ( X ) = 1 λ 2 D(X) = \frac{1}{{\lambda}^2} D(X)=λ21?

scipy中指數分布expon的參數傳入 λ \lambda λ的倒數。

A common parameterization for expon is in terms of the rate parameter lambda, such that pdf = lambda * exp(-lambda * x). This parameterization corresponds to using scale = 1 / lambda.

  1. 畫出不同參數下的指數分布, λ \lambda λ分別為 ( 0.5 , 1 , 1.5 ) (0.5,1,1.5) (0.5,1,1.5)

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import exponplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(figsize = (10, 8))params = [(0.5, 'red'), (1, 'blue'), (1.5, 'green')]x = np.linspace(0, 15, 1000)for i in range(0, len(params)):numda = params[i][0]color = params[i][1]mean, var = expon.stats(loc = 0, scale = 1 / numda, moments='mv')ax.plot(x, expon(scale = 1 / numda).pdf(x), color = color, label = 'lambda = {:.2f}, 均值:{:.2f}, 方差: {:.4f}'.format(numda, mean, var))ax.grid()ax.legend()plt.show()
    
  2. 生成服從不同參數指數分布的隨機數組(采樣100000次),然后查看數組的頻率分布

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import exponplt.rcParams["font.family"] = "SimHei"  # 設置字體
    plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 8))params = [(0.5, 'red'), (1, 'blue'), (1.5, 'green')]x = np.linspace(0, 15, 1000)# 采樣for i in range(0, len(params)):numda = params[i][0]color = params[i][1]ax[i].plot(x, expon(scale = 1/numda).pdf(x), color = color, label = 'lambda={}'.format(numda))ax[i].hist(expon(scale = 1/numda).rvs(size = 10000), density=True, bins = 100)ax[i].set_xticks(np.arange(0, 15))ax[i].set_xlim(0, 15)ax[i].grid()ax[i].legend()plt.show()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis 群集部署

1.關系型數據庫 關系型數據庫是一個結構化的數據庫&#xff0c;創建在關系模型基礎上&#xff0c;-般面向記錄。它借助于集合代數等數學概念和方法來處理數據庫中的數據。關系模型指二維表格模型,因而一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。現實世界中…

python及編程范式

編程范式 編程范式是一種基于特定的理論和原則來指導程序設計和開發風格的模型。它定義了編程語言的結構、風格、元素以及編寫程序時應遵循的規則。不同的編程范式提供了不同視角來解決問題&#xff0c;影響著代碼組織方式、執行流程以及如何表達程序邏輯。 OOP和FP 函數式編…

vue3監聽input保留兩位小數點

監聽input輸入框校驗 再次記錄下&#xff0c;這里沒封裝&#xff0c;僅演示~ 保留2位小數 只能輸入數字和兩位小數 <el-inputv-model"form.amount"oninput"valuevalue.replace(/[^0-9.]/g,).replace(/\.{2,}/g,.).replace(/^(\-)*(\d)\.(\d\d).*$/,$1$2.$3…

(2024,MixLoRA,任務干擾,獨立因子選擇,條件因子選擇)使用 LoRA 的條件混合進行多模態指令調優

Multimodal Instruction Tuning with Conditional Mixture of LoRA 公和眾和號&#xff1a;EDPJ&#xff08;進 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 進 V 交流群&#xff09; 目錄 0. 摘要 3. 任務干擾在多模態指令調優中的 LoRA 應用 3.1 背景&am…

小甲魚Python07 函數初級

一、創建和調用函數 pass語句表示一個空的代碼塊&#xff0c;我們經常先寫好函數&#xff0c;pass占一個坑&#xff0c;等規劃好之后再來填坑。 函數也是可以指定參數的&#xff0c;我們會把參數傳進去用來替代形參。 在Python里如果想要返回值&#xff0c;不需要指定函數的返…

仿牛客網項目---顯示評論和添加評論功能的實現

這篇文章&#xff0c;我來介紹一下我的項目中的另外一個功能&#xff1a;顯示評論和添加評論。 其實這兩個功能都不怎么重要&#xff0c;我感覺最重要的應該是用戶注冊登錄功能&#xff0c;這個也了解一下&#xff0c;知道這么一回事兒就好。 首先設計DAO層。 Mapper public …

python實現AES加密解密

1. 前言 AES是一種對稱加密&#xff0c;所謂對稱加密就是加密與解密使用的秘鑰是一個。 之前寫過一片關于python AES加密解密的文章&#xff0c;但是這里面細節實在很多&#xff0c;這次我從 參數類型、加密模式、編碼模式、補全模式、等等方面 系統的說明如何使用AES加密解密…

直觀理解卷積

卷積直觀理解 原文來自最容易理解的對卷積(convolution)的解釋 &#x1f3ac;個人簡介&#xff1a;一個全棧工程師的升級之路&#xff01; &#x1f4cb;個人專欄&#xff1a;計算機雜記 &#x1f380;CSDN主頁 發狂的小花 &#x1f304;人生秘訣&#xff1a;學習的本質就是極致…

從經典學習 NLP:小白到大白:1. Word Tokenization

文章目錄 1 Word Tokenization1.1 Top-down/rule-based tokenization1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm 1 Word Tokenization 來源&#xff1a;JM3 Chapter 2.5 p19-23 tokenization 就是 把 running text 分割成為 words&#xff1b; 常有兩種方…

AVL 樹

AVL樹的概念 二叉搜索樹雖可以縮短查找的效率&#xff0c;但如果數據有序或接近有序二叉搜索樹將退化為單支樹&#xff0c;查找元素相當于在順序表中搜索元素&#xff0c;效率低下。因此&#xff0c;兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年 發明了一種解決…

k8s筆記26--快速實現prometheus監控harbor

k8s筆記26--快速實現prometheus監控harbor 簡介采集指標&配置grafana面板采集指標配置grafana面板 說明 簡介 harbor是當前最流行的開源容器鏡像倉庫項目&#xff0c;被大量IT團隊廣泛應用于生產、測試環境的項目中。本文基于Harbor、Prometheus、Grafana介紹快速實現監控…

3. 臺階問題

數樓梯 題目描述 樓梯有 N N N 階&#xff0c;上樓可以一步上一階&#xff0c;也可以一步上二階。 編一個程序&#xff0c;計算共有多少種不同的走法。 輸入格式 一個數字&#xff0c;樓梯數。 輸出格式 輸出走的方式總數。 樣例 #1 樣例輸入 #1 4樣例輸出 #1 5提示…

FPGA之帶有進位邏輯的加法運算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 綜合結果如下圖所示&#xff1a; 使用了6個Lut&#xff0c;&#xff0c;6個LUT分布…

詳細介紹如何用windows11自帶Hyper-V安裝虛擬機

通過系統自帶的hyper-v安裝windows11&#xff0c;舒服又愜意&#xff0c;相比用第三方虛擬機軟件速度快很多。 硬件準備 1、對于電腦自帶的虛擬機Hyper-V&#xff0c;不是每種電腦系統版本都帶著的。我們先要確定您的系統符合 Hyper-V 的最低要求。我們跟著下面的步驟來執行&…

鴻蒙開發相關知識(四)【數據持久化(用戶首選項、關系型數據庫)、通知(基礎通知、進度條通知、通知意圖)】

文章目錄 一、數據持久化1、用戶首選項&#xff08;1&#xff09;語法說明&#xff08;2&#xff09;完整代碼示例 2、關系型數據庫&#xff08;1&#xff09;初始化數據庫&#xff08;2&#xff09;增刪改數據&#xff08;3&#xff09;查詢數據&#xff08;4&#xff09;完整…

《2023年勒索軟件攻擊態勢報告》

獲取方式&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取碼&#xff1a;2lo0

探索數據結構:解鎖計算世界的密碼

?? 歡迎大家來到貝蒂大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 貝蒂的主頁&#xff1a;Betty‘s blog 前言 隨著應用程序變得越來越復雜和數據越來越豐富&#xff0c;幾百萬、…

600萬訂單每秒Disruptor +SpringBoot,如何解決消息不丟失?

尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中&#xff0c;最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、shein 希音、百度、網易的面試資格&#xff0c;遇到很多很重要的面試題&#xff1a; Disruptor 官方說能達到每秒600w OPS訂單處理能力&…

Java——Object

1.Object萬類之祖 1.1 Object類型的概述 Object類是所有類型的頂層父類&#xff0c;所有類型的直接或者間接的父類&#xff1b;所有的類型中都含有Object類中的所有方法。 隨意定義一個類型,不手動顯式定義其父類&#xff0c;那么這個類的父類就是Object類 public Object() …

【C語言】指針初階2.0版本

這篇博文我們來繼續學習指針的其他內容 指針2.0 傳值調用與傳址調用傳值調用傳址調用 一維數組與指針理解數組名使用指針深入理解一維數組 二級指針指針數組二維數組與指針 傳值調用與傳址調用 在開始之前&#xff0c;我們需要先了解這個概念&#xff0c;后面才能夠正常的學習…