Bagaimana Anda memilih data acak dengan python?

Penggunaan keacakan adalah bagian penting dari konfigurasi dan evaluasi algoritma pembelajaran mesin

Dari inisialisasi bobot secara acak dalam jaringan syaraf tiruan, hingga pemisahan data menjadi rangkaian uji dan rangkaian uji acak, hingga pengacakan acak dari rangkaian data pelatihan dalam penurunan gradien stokastik, menghasilkan angka acak dan memanfaatkan keacakan adalah keterampilan yang diperlukan

Dalam tutorial ini, Anda akan menemukan cara menghasilkan dan bekerja dengan bilangan acak dengan Python

Setelah menyelesaikan tutorial ini, Anda akan tahu

  • Keacakan itu dapat diterapkan dalam program melalui penggunaan generator nomor pseudorandom
  • Cara menghasilkan angka acak dan menggunakan keacakan melalui pustaka standar Python
  • Cara menghasilkan array angka acak melalui pustaka NumPy

Mulailah proyek Anda dengan buku baru saya Statistics for Machine Learning, termasuk tutorial langkah demi langkah dan file kode sumber Python untuk semua contoh

Mari kita mulai

Bagaimana Anda memilih data acak dengan python?

Cara Menghasilkan Angka Acak dengan Python
Foto oleh Harold Litwiler, beberapa hak dilindungi undang-undang

Sekilas Tutorial

Tutorial ini dibagi menjadi 3 bagian;

  1. Generator Nomor Pseudorandom
  2. Angka Acak dengan Perpustakaan Standar Python
    1. Benih Generator Angka Acak
    2. Nilai Titik Mengambang Acak
    3. Nilai Bilangan Bulat Acak
    4. Nilai Gaussian Acak
    5. Memilih Secara Acak Dari Daftar
    6. Subsampel Acak Dari Daftar
    7. Acak Daftar Secara Acak
  3. Angka Acak dengan NumPy
    1. Benih Generator Angka Acak
    2. Susunan Nilai Titik Acak Acak
    3. Larik Nilai Bilangan Bulat Acak
    4. Array Nilai Gaussian Acak
    5. Acak NumPy Array

1. Generator Nomor Pseudorandom

Sumber keacakan yang kami masukkan ke dalam program dan algoritme kami adalah trik matematika yang disebut generator bilangan acak semu

Generator angka acak adalah sistem yang menghasilkan angka acak dari sumber keacakan yang sebenarnya. Seringkali sesuatu yang fisik, seperti penghitung Geiger, di mana hasilnya diubah menjadi angka acak. Kami tidak membutuhkan keacakan yang sebenarnya dalam pembelajaran mesin. Sebagai gantinya kita bisa menggunakan pseudorandomness. Pseudorandomness adalah sampel angka yang terlihat mendekati acak, tetapi dihasilkan menggunakan proses deterministik

Mengacak data dan menginisialisasi koefisien dengan nilai acak menggunakan generator bilangan acak semu. Program kecil ini seringkali merupakan fungsi yang dapat Anda panggil yang akan mengembalikan nomor acak. Dipanggil lagi, mereka akan mengembalikan nomor acak baru. Fungsi pembungkus sering juga tersedia dan memungkinkan Anda mendapatkan keacakan sebagai bilangan bulat, floating point, dalam distribusi tertentu, dalam rentang tertentu, dan seterusnya

Angka-angka dihasilkan secara berurutan. Urutan bersifat deterministik dan diunggulkan dengan nomor awal. Jika Anda tidak secara eksplisit meng-seed generator nomor pseudorandom, maka mungkin menggunakan waktu sistem saat ini dalam hitungan detik atau milidetik sebagai seed

Nilai benih tidak masalah. Pilih apa pun yang Anda inginkan. Yang penting adalah bahwa penyemaian proses yang sama akan menghasilkan urutan angka acak yang sama

Mari kita buat ini konkret dengan beberapa contoh

2. Angka Acak dengan Perpustakaan Standar Python

Pustaka standar Python menyediakan modul yang disebut acak yang menawarkan serangkaian fungsi untuk menghasilkan angka acak

Python menggunakan generator nomor pseudorandom yang populer dan kuat yang disebut Mersenne Twister

Pada bagian ini, kita akan melihat sejumlah kasus penggunaan untuk membuat dan menggunakan angka acak dan acak dengan API Python standar

Butuh bantuan dengan Statistik untuk Pembelajaran Mesin?

Ikuti kursus kilat email 7 hari gratis saya sekarang (dengan kode contoh)

Klik untuk mendaftar dan juga dapatkan kursus versi Ebook PDF gratis

Unduh Kursus Mini GRATIS Anda

Benih Generator Angka Acak

Generator nomor pseudorandom adalah fungsi matematika yang menghasilkan urutan angka yang hampir acak

Dibutuhkan parameter untuk memulai urutan, yang disebut benih. Fungsi tersebut bersifat deterministik, artinya dengan seed yang sama, maka akan menghasilkan barisan bilangan yang sama setiap waktu. Pilihan benih tidak masalah

Fungsi akan memunculkan generator nomor pseudorandom, mengambil nilai bilangan bulat sebagai argumen, seperti 1 atau 7. Jika fungsi seed() tidak dipanggil sebelum menggunakan keacakan, defaultnya adalah menggunakan waktu sistem saat ini dalam milidetik dari zaman (1970)

Contoh di bawah ini menunjukkan penyemaian generator nomor pseudorandom, menghasilkan beberapa angka acak, dan menunjukkan bahwa penyemaian ulang generator akan menghasilkan urutan angka yang sama yang dihasilkan

1

2

3

4

5

6

7

8

9

10

11

# seed generator nomor pseudorandom

dari acak impor benih

dari acak impor acak

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa angka acak

cetak(acak(), random(), random())

# setel ulang benih

benih(1)

# menghasilkan beberapa angka acak

cetak(acak(), random(), random())

Menjalankan contoh menyemai generator bilangan acak semu dengan nilai 1, menghasilkan 3 bilangan acak, memasang kembali generator, dan menunjukkan bahwa tiga bilangan acak yang sama dihasilkan

1

2

0. 13436424411240122 0. 8474337369372327 0. 763774618976614

0. 13436424411240122 0. 8474337369372327 0. 763774618976614

Akan berguna untuk mengontrol keacakan dengan menyetel seed untuk memastikan bahwa kode Anda menghasilkan hasil yang sama setiap saat, seperti dalam model produksi

Untuk menjalankan percobaan di mana pengacakan digunakan untuk mengontrol variabel perancu, seed yang berbeda dapat digunakan untuk setiap percobaan yang dijalankan

Nilai Titik Mengambang Acak

Nilai floating point acak dapat dihasilkan menggunakan fungsi. Nilai akan dihasilkan dalam rentang antara 0 dan 1, khususnya dalam interval [0,1)

Nilai diambil dari distribusi yang seragam, artinya setiap nilai memiliki peluang yang sama untuk ditarik

Contoh di bawah menghasilkan 10 nilai floating point acak

1

2

3

4

5

6

7

8

9

# menghasilkan nilai floating point acak

dari acak impor benih

dari acak impor acak

# penghasil nomor acak benih

benih(1)

# menghasilkan angka acak antara 0-1

untuk _ dalam rentang(10):

nilai = acak()

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak setiap nilai floating point acak

1

2

3

4

5

6

7

8

9

10

0. 13436424411240122

0. 8474337369372327

0. 763774618976614

0. 2550690257394217

0. 49543508709194095

0. 4494910647887381

0. 651592972722763

0. 7887233511355132

0. 0938595867742349

0. 02834747652200631

Nilai floating point dapat diubah skalanya ke rentang yang diinginkan dengan mengalikannya dengan ukuran rentang baru dan menambahkan nilai min, sebagai berikut

1

nilai yang diskalakan = min + (nilai * (maks - min))

Di mana min dan maks masing-masing adalah nilai minimum dan maksimum dari kisaran yang diinginkan, dan nilai adalah nilai floating point yang dihasilkan secara acak dalam kisaran antara 0 dan 1

Nilai Bilangan Bulat Acak

Nilai bilangan bulat acak dapat dihasilkan dengan fungsi

Fungsi ini membutuhkan dua argumen. awal dan akhir rentang untuk nilai bilangan bulat yang dihasilkan. Bilangan bulat acak dihasilkan di dalam dan termasuk nilai awal dan akhir rentang, khususnya dalam interval [mulai, akhir]. Nilai acak diambil dari distribusi yang seragam

Contoh di bawah menghasilkan 10 nilai integer acak antara 0 dan 10

1

2

3

4

5

6

7

8

9

# menghasilkan nilai bilangan bulat acak

dari acak impor benih

dari acak impor randint

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa bilangan bulat

untuk _ dalam rentang(10):

nilai = randint(0, 10)

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak 10 nilai bilangan bulat acak

1

2

3

4

5

6

7

8

9

10

2

9

1

4

1

7

7

7

10

6

Nilai Gaussian Acak

Nilai floating point acak dapat diambil dari distribusi Gaussian menggunakan fungsi

Fungsi ini membutuhkan dua argumen yang sesuai dengan parameter yang mengontrol ukuran distribusi, khususnya rata-rata dan standar deviasi

Contoh di bawah menghasilkan 10 nilai acak yang diambil dari distribusi Gaussian dengan rata-rata 0. 0 dan standar deviasi 1. 0

Perhatikan bahwa parameter ini bukan batas pada nilai dan bahwa penyebaran nilai akan dikendalikan oleh bentuk lonceng dari distribusi, dalam hal ini kemungkinan proporsional di atas dan di bawah 0. 0

1

2

3

4

5

6

7

8

9

# menghasilkan nilai Gaussian acak

dari acak impor benih

dari acak impor gauss

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa nilai Gaussian

untuk _ dalam rentang(10):

nilai = gauss(0, 1)

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak 10 nilai acak Gaussian

1

2

3

4

5

6

7

8

9

10

1. 2881847531554629

1. 449445608699771

0. 06633580893826191

-0. 7645436509716318

-1. 0921732151041414

0. 03133451683171687

-1. 022103170010873

-1. 4368294451025299

0. 19931197648375384

0. 13337460465860485

Memilih Secara Acak Dari Daftar

Angka acak dapat digunakan untuk memilih item secara acak dari daftar

Misalnya, jika daftar memiliki 10 item dengan indeks antara 0 dan 9, Anda dapat membuat bilangan bulat acak antara 0 dan 9 dan menggunakannya untuk memilih item secara acak dari daftar. Fungsi mengimplementasikan perilaku ini untuk Anda. Pilihan dibuat dengan kemungkinan seragam

Contoh di bawah menghasilkan daftar 20 bilangan bulat dan memberikan lima contoh memilih satu item acak dari daftar

1

2

3

4

5

6

7

8

9

10

11

12

# pilih elemen acak dari daftar

dari acak impor benih

dari acak impor pilihan

# penghasil nomor acak benih

benih(1)

# siapkan urutan

urutan = [i untuk i in range(20)]

cetak(urutan)

# membuat pilihan dari urutan

untuk _ dalam rentang(5):

pilihan = pilihan(urutan)

cetak(pemilihan)

Menjalankan contoh terlebih dahulu akan mencetak daftar nilai bilangan bulat, diikuti dengan lima contoh memilih dan mencetak nilai acak dari daftar

1

2

3

4

5

6

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

4

18

2

8

3

Subsampel Acak Dari Daftar

Kami mungkin tertarik untuk mengulangi pemilihan item secara acak dari daftar untuk membuat subset yang dipilih secara acak

Yang penting, setelah item dipilih dari daftar dan ditambahkan ke subset, item tersebut tidak boleh ditambahkan lagi. Ini disebut pemilihan tanpa penggantian karena setelah item dari daftar dipilih untuk subset, item tersebut tidak ditambahkan kembali ke daftar awal (i. e. tidak tersedia untuk seleksi ulang)

Perilaku ini disediakan dalam fungsi ) yang memilih sampel acak dari daftar tanpa penggantian. Fungsi mengambil daftar dan ukuran subset untuk dipilih sebagai argumen. Perhatikan bahwa item sebenarnya tidak dihapus dari daftar asli, hanya dipilih ke dalam salinan daftar

Contoh di bawah menunjukkan memilih subset dari lima item dari daftar 20 bilangan bulat

1

2

3

4

5

6

7

8

9

10

11

# pilih sampel acak tanpa penggantian

dari acak impor benih

dari acak impor sampel

# penghasil nomor acak benih

benih(1)

# siapkan urutan

urutan = [i untuk i in range(20)]

cetak(urutan)

# pilih subset tanpa penggantian

subset = sampel(urutan, 5)

cetak(subset)

Menjalankan contoh terlebih dahulu mencetak daftar nilai bilangan bulat, kemudian sampel acak dipilih dan dicetak untuk perbandingan

1

2

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

[4, 18, 2, 8, 3]

Acak Daftar Secara Acak

Keacakan dapat digunakan untuk mengocok daftar item, seperti mengocok setumpuk kartu

Fungsi shuffle() dapat digunakan untuk mengocok daftar. Pengacakan dilakukan di tempat, artinya daftar yang disediakan sebagai argumen untuk fungsi dikocok, bukan salinan acak dari daftar yang dibuat dan dikembalikan

Contoh di bawah ini menunjukkan pengacakan daftar nilai bilangan bulat secara acak

1

2

3

4

5

6

7

8

9

10

11

# mengacak urutan secara acak

dari acak impor benih

dari acak impor acak

# penghasil nomor acak benih

benih(1)

# siapkan urutan

urutan = [i untuk i in range(20)]

cetak(urutan)

# mengacak urutan secara acak

acak(urutan)

cetak(urutan)

Menjalankan contoh terlebih dahulu mencetak daftar bilangan bulat, lalu daftar yang sama setelah diacak secara acak

1

2

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

[11, 5, 17, 19, 9, 0, 16, 1, 15, 6, 10, 13, 14, 12, 7, 3, 8, 2, 18, 4]

3. Angka Acak dengan NumPy

Dalam pembelajaran mesin, Anda mungkin menggunakan pustaka seperti scikit-learn dan Keras

Pustaka ini menggunakan NumPy di ​​balik sampul, pustaka yang bekerja dengan vektor dan matriks angka menjadi sangat efisien

NumPy juga memiliki implementasi sendiri dari generator nomor pseudorandom dan fungsi pembungkus kenyamanan

NumPy juga mengimplementasikan generator nomor pseudorandom Mersenne Twister

Mari kita lihat beberapa contoh menghasilkan angka acak dan menggunakan keacakan dengan array NumPy

Benih Generator Angka Acak

Generator nomor pseudorandom NumPy berbeda dari generator nomor pseudorandom perpustakaan standar Python

Yang penting, penyemaian generator nomor pseudorandom Python tidak memengaruhi generator nomor pseudorandom NumPy. Itu harus diunggulkan dan digunakan secara terpisah

Fungsi seed() dapat digunakan untuk seed generator nomor pseudorandom NumPy, mengambil bilangan bulat sebagai nilai seed

Contoh di bawah ini menunjukkan bagaimana melakukan seed generator dan bagaimana reseeding generator akan menghasilkan urutan angka acak yang sama.

1

2

3

4

5

6

7

8

9

10

11

# seed generator nomor pseudorandom

dari numpy. acak impor benih

dari numpy. acak impor random

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa angka acak

cetak(dan(3))

# setel ulang benih

benih(1)

# menghasilkan beberapa angka acak

cetak(dan(3))

Menjalankan contoh menyemai generator nomor acak semu, mencetak urutan angka acak, lalu mengulang generator yang menunjukkan bahwa urutan angka acak yang sama persis dihasilkan

1

2

[4. 17022005e-01 7. 20324493e-01 1. 14374817e-04]

[4. 17022005e-01 7. 20324493e-01 1. 14374817e-04]

Susunan Nilai Titik Acak Acak

Array nilai floating point acak dapat dihasilkan dengan fungsi rand() NumPy

Jika tidak ada argumen yang diberikan, maka satu nilai acak dibuat, jika tidak, ukuran array dapat ditentukan

Contoh di bawah ini membuat larik 10 nilai floating point acak yang diambil dari distribusi yang seragam

1

2

3

4

5

6

7

8

# menghasilkan nilai floating point acak

dari numpy. acak impor benih

dari numpy. acak impor random

# penghasil nomor acak benih

benih(1)

# menghasilkan angka acak antara 0-1

nilai = rand(10)

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak larik NumPy dari nilai floating point acak

1

2

3

[4. 17022005e-01 7. 20324493e-01 1. 14374817e-04 3. 02332573e-01

1. 46755891e-01 9. 23385948e-02 1. 86260211e-01 3. 45560727e-01

3. 96767474e-01 5. 38816734e-01]

Larik Nilai Bilangan Bulat Acak

Array bilangan bulat acak dapat dihasilkan menggunakan fungsi randint() NumPy

Fungsi ini membutuhkan tiga argumen, ujung bawah rentang, ujung atas rentang, dan jumlah nilai integer yang akan dihasilkan atau ukuran array. Bilangan bulat acak akan diambil dari distribusi yang seragam termasuk nilai yang lebih rendah dan tidak termasuk nilai yang lebih tinggi, mis. g. dalam interval [bawah, atas)

Contoh di bawah ini menunjukkan pembuatan array bilangan bulat acak

1

2

3

4

5

6

7

8

# menghasilkan nilai bilangan bulat acak

dari numpy. acak impor benih

dari numpy. acak impor randint

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa bilangan bulat

nilai = randint(0, 10, 20)

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak larik berisi 20 nilai bilangan bulat acak antara 0 dan 10

1

[5 8 9 5 0 0 1 7 6 9 2 4 5 2 4 2 4 7 7 9]

Array Nilai Gaussian Acak

Array nilai Gaussian acak dapat dihasilkan menggunakan fungsi randn() NumPy

Fungsi ini membutuhkan satu argumen untuk menentukan ukuran array yang dihasilkan. Nilai Gaussian diambil dari distribusi Gaussian standar; . 0 dan standar deviasi 1. 0

Contoh di bawah ini menunjukkan cara menghasilkan array nilai Gaussian acak

1

2

3

4

5

6

7

8

# menghasilkan nilai Gaussian acak

dari numpy. acak impor benih

dari numpy. acak impor randn

# penghasil nomor acak benih

benih(1)

# menghasilkan beberapa nilai Gaussian

nilai = randn(10)

cetak(nilai)

Menjalankan contoh menghasilkan dan mencetak larik 10 nilai acak dari distribusi Gaussian standar

1

2

[ 1. 62434536 -0. 61175641 -0. 52817175 -1. 07296862  0. 86540763 -2. 3015387

1. 74481176 -0. 7612069   0. 3190391  -0. 24937038]

Nilai dari distribusi Gaussian standar dapat diskalakan dengan mengalikan nilai dengan standar deviasi dan menambahkan rata-rata dari distribusi skala yang diinginkan. Misalnya

1

nilai skala = rata-rata + nilai * stdev

Di mana rata-rata dan stdev adalah rata-rata dan deviasi standar untuk distribusi Gaussian skala yang diinginkan dan nilai adalah nilai yang dihasilkan secara acak dari distribusi Gaussian standar

Acak NumPy Array

Array NumPy dapat diacak secara acak di tempat menggunakan fungsi shuffle() NumPy

Contoh di bawah ini menunjukkan cara mengocok array NumPy

1

2

3

4

5

6

7

8

9

10

11

# mengacak urutan secara acak

dari numpy. acak impor benih

dari numpy. acak impor acak

# penghasil nomor acak benih

benih(1)

# siapkan urutan

urutan = [i untuk i in range(20)]

cetak(urutan)

# mengacak urutan secara acak

acak(urutan)

cetak(urutan)

Menjalankan contoh terlebih dahulu menghasilkan daftar 20 nilai bilangan bulat, lalu mengocok dan mencetak larik yang diacak

Bagaimana Anda memilih nomor acak dari 1 hingga 100 dengan Python?

Hasilkan angka acak antara 1 dan 100 . x = randint(1, 100) # Pilih angka acak antara 1 dan 100. print(randint(1, 100)) # Pick a random number between 1 and 100. x = randint(1, 100) # Pick a random number between 1 and 100.

Bagaimana Anda bisa memilih item acak dari rentang dengan Python?

Metode 1. Buat bilangan bulat acak menggunakan acak. metode randrange() . Python menyediakan fungsi bernama randrange() dalam paket acak yang dapat menghasilkan angka acak dari rentang yang diberikan sementara masih memungkinkan ruang untuk memasukkan langkah-langkah. Contoh di bawah ini menggunakan randrange() untuk mencetak bilangan bulat secara acak.