最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)從概率分布中隨機采樣

 更新時間:2021年12月07日 08:56:37   作者:orion-orion  
這篇文章主要介紹了通過幾個機器學習中最常用的概率分布為例,來看看如何從一個概率分布中采樣,文章中的代碼對我們的工作或?qū)W習具有一定價值,感興趣的朋友可以了解一下

在上一篇博文《Python中的隨機采樣和概率分布(一)》中,我們介紹了Python中最簡單的隨機采樣函數(shù)。接下來我們更進一步,來看看如何從一個概率分布中采樣,我們以幾個機器學習中最常用的概率分布為例。

1. 二項(binomial)/伯努利(Bernoulli)分布

1.1 概率質(zhì)量函數(shù)(pmf)

當n=1時,則取到下列極限情況,是為參數(shù)為p的二項分布:

二項分布P(X=x; n, p)可以表示進行獨立重復試驗n次,每次有兩成功和失敗可能結(jié)果(分別對應概率p和1?p),共成功x次的概率。

1.2 函數(shù)原型

random.binomial(n, p, size=None)

參數(shù):

n: int or array_like of ints ? 對應分布函數(shù)中的參數(shù) n,>=0,浮點數(shù)會被截斷為整形。

p: float or array_like of floats ? 對應分布函數(shù)參數(shù)p, >=0并且<=1。

size: int or tuple of ints, optional ? 如果給定形狀為(m,n,k),那么m×n×k個隨機樣本會從中抽取。默認為None,即返回一個一個標量隨機樣本。

返回:

out: ndarray or scalar? 從帶參數(shù)的概率分布中采的隨機樣本,每個樣本表示獨立重復實驗n次中成功的次數(shù)。

1.3 使用樣例

設進行獨立重復實驗10次,每次成功概率為0.5,采樣樣本表示總共的成功次數(shù)(相當于扔10次硬幣,正面朝上的次數(shù))??偣膊?0個樣本。

import numpy as np
n, p = 10, .5  
s = np.random.binomial(n, p, 20)
print(s) # [4 5 6 5 4 2 4 6 7 2 4 4 2 4 4 7 6 3 5 6]

可以粗略的看到,樣本幾乎都在5周圍上下波動。

我們來看一個有趣的例子。一家公司鉆了9口井,每口井成功的概率為0.1,所有井都失敗了,發(fā)生這種情況的概率是多少?

我們總共采樣2000次,來看下產(chǎn)生0結(jié)果的概率。

s = sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.
print(s) # 0.3823

可見,所有井失敗的概率為0.3823,這個概率還是蠻大的。

2. 多項(multinomial)分布

2.1 概率質(zhì)量函數(shù)(pmf)

當k=2時,則取到下列極限情況,是為參數(shù)為n, p的二項分布:

也就是說,多項分布式二項分布的推廣:仍然是獨立重復實驗n次,但每次不只有成功和失敗兩種結(jié)果,而是k種可能的結(jié)果,每種結(jié)果的概率為pi。多項分布是一個隨機向量的分布,x=(x1,x2,...,xk)意為第i種結(jié)果出現(xiàn)xi次,P(X=x; n, p)也就表示第i種結(jié)果出現(xiàn)xi次的概率。

2.2 函數(shù)原型

random.multinomial(n, pvals, size=None)

參數(shù):

n: int ? 對應分布函數(shù)中的參數(shù) n。

pvals: sequence of floats ? 對應分布函數(shù)參數(shù)p, 其長度等于可能的結(jié)果數(shù)k,并且有0?pi?1。

size: int or tuple of ints, optional ? 為輸出形狀大小,因為采出的每個樣本是一個隨機向量,默認最后一維會自動加上k,如果給定形狀為(m,n),那么m×n個維度為k的隨機向量會從中抽取。默認為None,即返回一個一個k維的隨機向量。

返回:

out: ndarray ? 從帶參數(shù)的概率分布中采的隨機向量,長度為可能的結(jié)果數(shù)k,如果沒有給定 size,則shape為 (k,)

2.3 使用樣例

設進行獨立重復實驗20次,每次情況的概率為1/6,采樣出的隨機向量表示每種情況出現(xiàn)次數(shù)(相當于扔20次六面骰子,點數(shù)為0, 1, 2, ..., 5出現(xiàn)的次數(shù))??偣膊?個樣本。

s = np.random.multinomial(20, [1/6.]*6, size=1)
print(s) # [[4 2 2 3 5 4]]

當然,如果不指定size,它直接就會返回一個一維向量了

s = np.random.multinomial(20, [1/6.]*6)
print(s) # [4 1 4 3 5 3]

如果像進行多次采樣,改變 size即可:

s = np.random.multinomial(20, [1/6.]*6, size=(2, 2))
print(s)
# [[[4 3 4 2 6 1]
#   [5 2 1 6 3 3]]

#  [[5 4 1 1 6 3]
#   [2 5 2 5 4 2]]]

這個函數(shù)在論文<sup>[1]</sup>的實現(xiàn)代碼<sup>[2]</sup>中用來設置每一個 client分得的樣本數(shù):

for cluster_id in range(n_clusters): 
    weights = np.random.dirichlet(alpha=alpha * np.ones(n_clients))
    clients_counts[cluster_id] = np.random.multinomial(clusters_sizes[cluster_id], weights)
    # 一共扔clusters_sizes[cluster_id]次篩子,該函數(shù)返回骰子落在某個client上各多少次,也就對應著該client應該分得的樣本數(shù)

3.均勻(uniform)分布

3.1 概率密度函數(shù)(pdf)

均勻分布可用于隨機地從連續(xù)區(qū)間[a,b)內(nèi)進行采樣。

3.2 函數(shù)原型

random.uniform(low=0.0, high=1.0, size=None)

參數(shù):

low: float or array_like of floats, optional ? 對應分布函數(shù)中的下界參數(shù) a,默認為0。

high: float or array_like of floats ? 對應分布函數(shù)中的下界參數(shù) b,默認為1.0。

size: int or tuple of ints, optional ? 為輸出形狀大小,如果給定形狀為(m,n,k),那么m×n×k的樣本會從中抽取。默認為None,即返回一個單一標量。

返回:

out: ndarray or scalar ? 從帶參數(shù)的均勻分布中采的隨機樣本

3.3 使用樣例

s = np.random.uniform(-1,0,10)
print(s)
# [-0.9479594  -0.86158902 -0.63754099 -0.0883407  -0.92845644 -0.11148294
#  -0.19826197 -0.77396765 -0.26809953 -0.74734785]

4. 狄利克雷(Dirichlet)分布

4.1 概率密度函數(shù)(pdf)

4.2 函數(shù)原型

random.dirichlet(alpha, size=None)

參數(shù):

alpha: sequence of floats, length k ? 對應分布函數(shù)中的參數(shù)向量 α,長度為k。

size: int or tuple of ints, optional ? 為輸出形狀大小,因為采出的每個樣本是一個隨機向量,默認最后一維會自動加上k,如果給定形狀為(m,n),那么m×n個維度為k的隨機向量會從中抽取。默認為None,即返回一個一個k維的隨機向量。

返回:

out: ndarray ? 采出的樣本,大小為(size,k)。

4.3 使用樣例

設α=(10,5,3)(意味著k=3),size=(2,2),則采出的樣本為2×2個維度為k=3的隨機向量。

s = np.random.dirichlet((10, 5, 3), size=(2, 2))
print(s)
# [[[0.82327647 0.09820451 0.07851902]
#   [0.50861077 0.4503409  0.04104833]]

#  [[0.31843167 0.22436547 0.45720285]
#   [0.40981943 0.40349597 0.1866846 ]]]

這個函數(shù)在論文[1]的實現(xiàn)代碼[2]中用來生成符合狄利克雷分布的權(quán)重向量

for cluster_id in range(n_clusters): 
    # 為每個client生成一個權(quán)重向量,文章中分布參數(shù)alpha每一維都相同
    weights = np.random.dirichlet(alpha=alpha * np.ones(n_clients))
    clients_counts[cluster_id] = np.random.multinomial(clusters_sizes[cluster_id], weights)

參考文獻

[1] Marfoq O, Neglia G, Bellet A, et al. Federated multi-task learning under a mixture of distributions[J]. Advances in Neural Information Processing Systems, 2021, 34.

[2] https://github.com/omarfoq/FedEM

[3] https://www.python.org/

[4] https://numpy.org/

到此這篇關(guān)于Python實現(xiàn)從概率分布中隨機采樣的文章就介紹到這了,更多相關(guān)Python 概率分布 隨機采樣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python之列表的插入&替換修改方法

    Python之列表的插入&替換修改方法

    今天小編就為大家分享一篇Python之列表的插入&替換修改方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python類函數(shù)的有效調(diào)用方式

    python類函數(shù)的有效調(diào)用方式

    文章介紹了Python中類的幾種不同方法,并展示了如何有效調(diào)用這些方法,實驗涵蓋了屬性方法、靜態(tài)方法、類方法、普通方法、保護方法和私有方法,并詳細說明了每種方法的調(diào)用方式,文章還討論了如何處理調(diào)用錯誤和返回值,并提供了一些實用建議
    2024-11-11
  • Windows環(huán)境打包python工程為可執(zhí)行程序的詳細過程

    Windows環(huán)境打包python工程為可執(zhí)行程序的詳細過程

    我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個比較完整的過程,一起看看吧
    2024-01-01
  • Python中sorted()函數(shù)的強大排序技術(shù)實例探索

    Python中sorted()函數(shù)的強大排序技術(shù)實例探索

    排序在編程中是一個基本且重要的操作,而Python的sorted()函數(shù)則為我們提供了強大的排序能力,在本篇文章中,我們將深入研究不同排序算法、sorted()?函數(shù)的靈活性,以及各種排序場景下的最佳實踐
    2024-01-01
  • Python利用遞歸和walk()遍歷目錄文件的方法示例

    Python利用遞歸和walk()遍歷目錄文件的方法示例

    在日常開發(fā)中經(jīng)常需要檢查一個“目錄或文件夾”內(nèi)部有沒有我們想要的文件或者文件夾,下面這篇文章主要給大家介紹了關(guān)于Python利用遞歸和walk()遍歷目錄文件的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Pycharm如何運行.py文件的方法步驟

    Pycharm如何運行.py文件的方法步驟

    這篇文章主要介紹了Pycharm如何運行.py文件的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python數(shù)字圖像處理實現(xiàn)圖像的形變與縮放

    python數(shù)字圖像處理實現(xiàn)圖像的形變與縮放

    這篇文章主要為大家介紹了python數(shù)字圖像處理實現(xiàn)圖像的形變與縮放示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)

    python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)

    這篇文章主要介紹了python讀寫數(shù)據(jù)讀寫csv文件(pandas用法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘

    django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘

    這篇文章主要介紹了django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 深度Q網(wǎng)絡DQN(Deep Q-Network)強化學習的原理與實戰(zhàn)

    深度Q網(wǎng)絡DQN(Deep Q-Network)強化學習的原理與實戰(zhàn)

    深度Q學習將深度神經(jīng)網(wǎng)絡與強化學習相結(jié)合,解決了傳統(tǒng)Q學習在高維狀態(tài)空間下的局限性,通過經(jīng)驗回放和目標網(wǎng)絡等技術(shù),DQN能夠在復雜環(huán)境中學習有效的策略,本文通過CartPole環(huán)境的完整實現(xiàn),展示了DQN的核心思想和實現(xiàn)細節(jié)
    2025-04-04

最新評論

淅川县| 南京市| 建湖县| 普洱| 邯郸县| 湖州市| 忻州市| 涿州市| 建平县| 都兰县| 洪江市| 镇赉县| 信阳市| 平湖市| 镇宁| 平谷区| 竹山县| 棋牌| 万盛区| 内江市| 北流市| 司法| 德格县| 瑞安市| 高阳县| 大安市| 徐州市| 永兴县| 郁南县| 黄山市| 哈巴河县| 佳木斯市| 象山县| 崇信县| 安国市| 襄樊市| 仙游县| 凤阳县| 南安市| 改则县| 襄垣县|