temukan jumlah bilangan bulat item dari daftar yang diberi probabilitas

Asumsikan, saya memiliki daftar dengan panjang 20 dan setiap hari, saya ingin mengetahui jumlah bilangan bulat item dari daftar ini dengan probabilitas tertentu. Setelah mengekstraksi jumlah item bilangan bulat, saya ingin melakukan operasi lebih lanjut.

m = [10,20,30,40, 50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
prob = 0.2

Dalam contoh di atas, saya ingin mengetahui berapa banyak item yang akan dipilih rata-rata setiap hari dengan probabilitas 0,2. Jadi rata-rata, dari daftar yang panjangnya 20 dan probabilitas 0,2, saya harus mendapatkan jumlah item = 4 setiap hari. Bagaimana saya bisa mendapatkan jumlah kejadian berdasarkan probabilitas dengan Python? Haruskah saya menggunakan Poisson untuk mendapatkan jumlah peristiwa dalam periode waktu tetapi saya tidak yakin, bagaimana cara memasukkan ukuran daftar dalam fungsi Poisson dengan Python. Dan bagaimana cara mendapatkan jumlah item bilangan bulat ketika probabilitas katakanlah 0,113 atau 0,31 dll. Bagaimana saya bisa mendapatkannya dengan Python?


person HT121    schedule 15.08.2019    source sumber
comment
prob * len(m)? Tampaknya Anda terlalu memperumitnya.   -  person John Coleman    schedule 15.08.2019
comment
Apakah ada hubungan antara probabilitas dan jumlah item yang dipilih?? Saya tidak percaya ada?   -  person Anwarvic    schedule 15.08.2019
comment
Haruskah itu menjadi int(prob * len(m)), seperti yang dikatakan John Coleman?   -  person ivallesp    schedule 15.08.2019


Jawaban (2)


Dengan asumsi terpilih atau tidaknya setiap elemen daftar merupakan peristiwa independen dengan probabilitas prob, jumlah item yang dipilih adalah variabel acak binomial dengan parameter len(m) dan prob. Nilai yang diharapkan dari variabel acak tersebut adalah prob * len(m).

Jika Anda ingin mensimulasikan variabel acak ini (daripada menghitung nilai yang diharapkan), Anda dapat menggunakan:

import random

def binomial_variate(n,p):
    return sum(random.random() < p for _ in range(n))

Misalnya,

>>> trials = [binomial_variate(20,0.12) for _ in range(100)]
>>> trials
[5, 6, 2, 1, 2, 4, 3, 3, 2, 3, 4, 1, 3, 2, 2, 3, 1, 0, 2, 4, 6, 1, 1, 2, 2, 3, 4, 2, 2, 1, 2, 1, 3, 4, 2, 3, 2, 2, 4, 4, 5, 1, 1, 1, 1, 2, 2, 3, 2, 2, 5, 4, 4, 1, 4, 4, 3, 5, 2, 3, 2, 4, 3, 4, 4, 2, 2, 1, 2, 1, 2, 1, 3, 0, 4, 3, 2, 4, 1, 2, 1, 2, 3, 2, 2, 3, 2, 1, 4, 4, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2]
>>> sum(trials)/100
2.55
>>> 20*0.12
2.4
person John Coleman    schedule 15.08.2019
comment
Prob * len(m) berfungsi dengan baik ketika Anda mendapatkan bilangan bulat dari perkalian ini tetapi ketika Anda mendapatkan bilangan desimal, maka Anda perlu membulatkannya menggunakan int(len(m) * prob). Dengan asumsi panjang daftar tetap 20 dan prob = 0,113, Anda mendapatkan 2,26, dan dengan int(), Anda mendapatkan 2. Ini akan menyebabkan banyak perbedaan dalam jumlah total setelah menggambar jumlah elemen 1000 kali (2*1000 vs 2,26 *1000). Apakah ada cara lain untuk mendapatkan jumlah item int langsung dari perhitungan probabilitas tanpa menggunakan int(), mirip dengan distribusi Poisson yang mengembalikan jumlah bilangan bulat kejadian dalam periode waktu)? - person HT121; 15.08.2019
comment
@HT121 Angka yang diharapkan adalah prob * len(m). Saya tidak mengerti mengapa Anda ingin membulatkan jawaban yang bermakna secara matematis menjadi sesuatu yang tidak terlalu masuk akal. Jika yang ingin Anda hitung bukan angka yang diharapkan, apa yang ingin Anda lakukan? Perhatikan bahwa saat Anda menjalankan eksperimen, angka sebenarnya yang dipilih akan berupa bilangan bulat namun akan bervariasi dari satu percobaan ke percobaan lainnya. Jika Anda menghitung rata-rata banyak percobaan tersebut, hasilnya tidak harus berupa bilangan bulat. - person John Coleman; 15.08.2019
comment
Sebenarnya saya perlu mencari tahu berapa banyak agen yang akan pindah ke lokasi baru setiap 24 jam. Jadi jumlah agen ini hanya boleh berupa bilangan bulat. Saya dapat memilih agen secara acak berdasarkan kemungkinan dan memindahkannya tetapi masalahnya adalah, saya harus melihat terlebih dahulu apakah lokasi baru memiliki tempat kosong untuk mengakomodasi agen baru. Oleh karena itu, saya ingin mengekstrak terlebih dahulu jumlah agen yang akan dipindahkan dalam 24 jam ke depan dan kemudian setiap langkah waktu yang sangat kecil, saya terus mencari apakah ada ruang yang tersedia di lokasi berikutnya. bila tersedia, saya memilih agen secara acak dan memindahkan serta mengurangi 1 dari variabel hitungan. - person HT121; 15.08.2019
comment
tapi terima kasih, jawaban Anda benar untuk kasus umum. - person HT121; 15.08.2019
comment
@ HT121 Saya menambahkan informasi tentang cara mensimulasikan variabel acak (modul acak Python tidak memiliki cara langsung untuk menghasilkan variabel acak tersebut, jadi Anda harus menulis fungsi Anda sendiri (atau menggunakan modul lain)). - person John Coleman; 15.08.2019
comment
Pengeditan terakhir Anda mendekati apa yang saya inginkan. Terima kasih. - person HT121; 15.08.2019

Anda cukup menggunakan sesuatu seperti int(len(m) * prob) dalam kode python Anda dan itu akan berhasil. Pastikan untuk mengelilinginya dengan coba/tangkap untuk menghindari kesalahan.
Anda juga harus memverifikasi bahwa nilai prob terdiri antara 0 dan 1 yang disertakan

person cocool97    schedule 15.08.2019