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 번은 모든 가중치 중 가중치가 가장 높기 때문에 세 번 발생했습니다. 따라서 발생 확률이 가장 높습니다.

누적 가중치가있는 요소 선택

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()함수를 사용하여 가중 임의 선택 항목 생성

무작위 가중치 선택을 생성하기 위해 NumPy는 일반적으로 사용자가 3.6 미만의 Python 버전을 사용할 때 사용됩니다.

여기서numpy.random.choice는 확률 분포를 결정하는 데 사용됩니다. 이 방법에서는 1D 배열의 임의 요소를 취하고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 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