Рубрики
Без рубрики

Пропорциональная выборка с использованием взвешенных значений

Вероятность и статистика играют очень важную роль в области науки и машины и машины. В этом сообщении вы узнаете концепцию пропорциональной выборки и как мы можем реализовать его с нуля без использования любой библиотеки https://youtu.be/qslmj-6aktu пропорциональная выборка прокладки. Пропорциональная выборка с использованием взвешенных значений Подробнее »

Автор оригинала: Neeraj Sujan.

Вероятность и статистика играют очень важную роль в области Наука и машина науки и машины Отказ В этом посте в блоге вы узнаете концепцию Пропорциональная выборка И как мы можем реализовать его с нуля без использования любой библиотеки

Пропорциональная выборка

Давайте возьмем пример бросания умереть, чтобы лучше понять концепцию пропорциональной выборки. Беспристращенная умирание – это умереть, в котором вероятность получения числа от 1 до 6 равна. Давайте теперь представим, что умирают смещены, то значение веса дается каждую сторону умира.

1 2 3 4 5 6

20 12 60 58 33 10

Пропорциональная выборка – это методика, в которой вероятность выбора числа пропорциональна весу этого числа. Итак, например, если мы проведем эксперимент подбрасывания умирания 100 раз, то вероятность получения 6 будет самым низким, так как значение веса со стороны 6 составляет 10, что является самым низким среди всех других ценностей веса. С другой стороны, вероятность получения 4 была бы самой высокой, поскольку значение веса для 3 составляет 60, что является самым высоким среди всех других ценностей.

Есть 3 основных шагов к пропорциональному образцу номера из списка.

  1. Вычисляя Кумулятивная нормализованная сумма ценности
  2. Выбор случайного значения из равномерного распределения
  3. Отборка значения

Кумулятивная нормализованная сумма

Чтобы вычислить совокупную нормированную сумму, нам сначала нужно рассчитать общую сумму значений веса, а затем нормализовать значения веса, разделив каждое значение веса на общую сумму. После нормализации значений веса у нас будут все значения от 0 до 1, и сумма всех значений всегда будет равна 1.

Давайте объявляем переменную, называемую кубиками и весами, которые представляют 6 сторон умира соответствующие значения веса

dice = [1, 2, 3, 4, 5, 6]
weights = [20, 12, 60, 58, 33, 10]

Теперь мы будем вычислить сумму всех весов и хранить ее в переменной под названием total_sum Отказ Мы можем использовать Встроенный Сумма функции для этого.

total_sum = sum(weights)
normalized_weights = [weight/total_sum for weight in weights]
print(normalized_weights)

Нормализованные веса имеют значения от 0 до 1, а сумма всех значений равна 1

[0.10362694300518134, 0.06217616580310881, 0.31088082901554404, 0.3005181347150259, 0.17098445595854922, 0.05181347150259067]

Совокупная сумма используется для мониторинга обнаружения изменения в последовательном наборе данных. Давайте обозначаем совокупную сумму переменной под названием Вес_cum_sum и вычисляя это следующим образом

weight_cum_sum[0] = normalized_weights[0]
weight_cum_sum[1] = weight_cum_sum[0] +  normalized_weights[1]
weight_cum_sum[2] = weight_cum_sum[1] +  normalized_weights[2]
weight_cum_sum[3] = weight_cum_sum[2] +  normalized_weights[3]
weight_cum_sum[4] = weight_cum_sum[3] +  normalized_weights[4]
weight_cum_sum[5] = weight_cum_sum[4] +  normalized_weights[5]

Мы можем сделать это эффективно в Python, запустив для цикла и добавления совокупных значений суммирования в списке

cum_sum = [normalized_weights[0]]
for i in range(1, len(normalized_weights)):
    cum_sum.append(cum_sum[i-1] +  normalized_weights[i])

Если мы Печать cum_sum. мы получим следующие значения

[0.10362694300518134, 0.16580310880829013, 0.47668393782383417,  0.7772020725388601,  0.9481865284974094, 1.0]

Выбирая случайное значение

Теперь, когда мы рассчитали совокупную сумму значений веса, теперь мы будем случайно выбрать число от 0 до 1 из равномерного распределения. Мы можем сделать это с помощью единой функции из случайного модуля в Python. Мы будем обозначить это число по r.

from random import uniform
r = uniform(0,1)

Выборка

Теперь мы будем петля через cum_sum массив и если значение r меньше или равно cum_sum значение в определенном индексе, то мы вернем значение умирания в этот индекс

for index, value in enumerate(cum_sum):
    if r <= value:
      return dice[index]  

Вы можете увидеть весь код ниже

from random import uniform

def proportional_sampling(dice, weights):
    total_sum = sum(weights)
    normalized_weights = [weight/total_sum for weight in weights]
    cum_sum = [normalized_weights[0]]
    r = uniform(0,1)
    for i in range(1, len(normalized_weights)):
        cum_sum.append(cum_sum[i-1] + normalized_weights[i])
    for index, value in enumerate(cum_sum):
        if r <=  value:
            return dice[index]
       
dice = [1,2,3,4,5,6]
weights = [20, 12, 60, 58, 33, 10]  
sampled_value = proportional_sampling(dice, weights)

Эксперименты

Теперь у нас будет проведен эксперимент, где позвонит пропорционально_sampling 100 раз и анализировать результат отбора проб

dice_result = {}
for i in range(0, 100):
    sampled_value = proportional_sampling(dice, weights)
    if sampled_value not in dice_result:
        dice_result[sampled_value] = 1
    else:
        dice_result[sampled_value] += 1

Как вы можете видеть, из вышеупомянутого рисунка, вероятность получения 3 – самое высокое, так как 3 получали вес 60, что было наибольшее количество в массиве весов. Если мы запустим этот эксперимент для 1000 итераций вместо 100, вы можете ожидать, чтобы получить еще более точные результаты.

Оригинал: “https://blog.finxter.com/proportional-sampling-using-weighted-values/”