使用 Python 的加權隨機選擇

Lakshay Kapoor 2023年10月10日
  1. 使用 random.choices() 函式生成加權隨機選擇
  2. 使用 numpy.random.choice() 函式生成加權隨機選擇
使用 Python 的加權隨機選擇

在 Python 中,我們可以使用 Random 和 NumPy 庫輕鬆生成隨機數。

根據元素的可能結果從列表或陣列中選擇隨機元素稱為加權隨機選擇。元素的選擇是通過為每個存在的元素分配一個概率來確定的。有時還會從製作的元素列表中選擇多個元素。

在本教程中,我們將討論如何在 Python 中生成加權隨機選擇。

使用 random.choices() 函式生成加權隨機選擇

在這裡,Python 的 random 模組用於生成隨機數。

choices() 函式中,加權隨機選擇是通過替換進行的。它也稱為帶放回的加權隨機樣本。此外,在此功能中,權重起著至關重要的作用。權重定義了選擇每個元素的可能結果。有兩種型別的權重:

  1. 相對權重
  2. 累積權重

選擇具有相對權重的元素

weights 引數定義了相對權重。對於列表中的每個元素,可能的結果是不同的。如果已使用相對權重確定了每個元素的可能結果,則僅根據相對權重進行選擇。

下面是一個例子:

import random

List = [12, 24, 36, 48, 60, 72, 84]
print(random.choices(List, weights=(30, 40, 50, 60, 70, 80, 90), k=7))

這裡列表中的每個元素都有自己的權重,即可能的結果。此外,上面示例中的 k 是給定列表中所需的元素數。

輸出:

[60, 84, 36, 72, 84, 84, 60]

在這裡,權重的總和不是 100,因為它們是相對權重而不是百分比。數字 84 出現了 3 次,因為它在所有權重中權重最高。所以它發生的概率是最高的。

選擇具有累積權重的元素

cum_weight 引數用於定義累積權重。一個元素的累積權重由前一個元素的權重加上該元素的相對權重決定。比如相對權重 [10, 20, 30, 40]等價於累積權重 [10, 30, 60, 100]

下面是一個例子:

import random

List = [13, 26, 39, 52, 65]
print(random.choices(List, cum_weights=(10, 30, 60, 100, 150), k=5))

輸出:

[65, 65, 39, 13, 52]

在這裡,數字 65 出現的次數也比任何其他數字都多,因為它具有最高的權重。

使用 numpy.random.choice() 函式生成加權隨機選擇

為了生成隨機加權選擇,當使用者使用低於 3.6 的 Python 版本時,通常使用 NumPy。

在這裡,numpy.random.choice 用於確定概率分佈。在此方法中,獲取一維陣列的隨機元素,並使用 choice() 函式返回 numpy 陣列的隨機元素。

import numpy as np

List = [500, 600, 700, 800]
sNumbers = np.random.choice(List, 4, p=[0.10, 0.20, 0.30, 0.40])
print(sNumbers)

在這裡,概率應該等於 1。數字 4 表示列表的大小。

輸出:

[800 500 600 800]
作者: Lakshay Kapoor
Lakshay Kapoor avatar Lakshay Kapoor avatar

Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.

LinkedIn

相關文章 - Python Random