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
Cara Menghasilkan Angka Acak dengan Python
Foto oleh Harold Litwiler, beberapa hak dilindungi undang-undang
Sekilas Tutorial
Tutorial ini dibagi menjadi 3 bagian;
- Generator Nomor Pseudorandom
- Angka Acak dengan Perpustakaan Standar Python
- Benih Generator Angka Acak
- Nilai Titik Mengambang Acak
- Nilai Bilangan Bulat Acak
- Nilai Gaussian Acak
- Memilih Secara Acak Dari Daftar
- Subsampel Acak Dari Daftar
- Acak Daftar Secara Acak
- Angka Acak dengan NumPy
- Benih Generator Angka Acak
- Susunan Nilai Titik Acak Acak
- Larik Nilai Bilangan Bulat Acak
- Array Nilai Gaussian Acak
- 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